== Why is this an issue? The `delete` operator is used to remove a property from an object. It only affects its https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwn[own] properties. There are two valid ways to remove a property: * Using the dot notation: `delete object.property` * Using the bracket notation: `delete object[property]` `delete` will throw a `TypeError` in strict mode if the property is a non-configurable property. `delete identifier` may work if `identifier` is a *configurable* property of the global object. For `identifier` to be *configurable*, it should have been declared directly as a `globalThis` property (`globalThis.identifier = 1`). This form is not common practice and should be avoided. Use `delete globalThis.identifier` instead if needed. Aside from that case, deleting variables, including function parameters, never works: * Variables declared with `var` cannot be deleted from the global or a function's scope, because while they may be attached to the global object, they are *non-configurable*. In CommonJS and ECMAScript modules, top-level variable declarations are scoped to the module and not attached to the global object. * Variables declared with `let` or `const` are not attached to any object. [source,javascript] ---- var x = 1; delete x; // Noncompliant: depending on the context, this does nothing or throws TypeError function foo(){} delete foo; // Noncompliant: depending on the context, this does nothing or throws TypeError ---- Avoid using the `delete identifier` form. Instead, use one of the valid forms. [source,javascript] ---- var obj = { x: 1, foo: function(){ ... } }; delete obj['x']; delete obj.foo; ---- == Resources === Documentation * MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete[`delete` operator] * MDN web docs - https://developer.mozilla.org/en-US/docs/Glossary/Global_object[Global object] * MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis[`globalThis`] * MDN web docs - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules[ECMAScript modules] * Node.js Documentation - https://nodejs.org/api/modules.html[CommonJS modules] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Remove this "delete" operator or pass an object property to it. === Highlighting * Primary: entire ``++delete++`` expression ''' == Comments And Links (visible only on this page) === on 4 Jun 2015, 12:13:03 Elena Vilchik wrote: \[~ann.campbell.2] Assign to you for validation and completion (labels, SQALE). CC [~linda.martin] === on 4 Jun 2015, 14:10:16 Ann Campbell wrote: \[~elena.vilchik] I've updated the description based on \https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete, which shows that _sometimes_ ``++delete++`` does work on things that might be thought of as variables (even though they're really properties of the global object.) Let me know if it's not okay endif::env-github,rspecator-view[]