The @@unscopable
symbol property contains property names that were not included in the ECMAScript standard prior to the ES2015 (ES6) version. These properties are excluded from with
statement bindings.
{{js_property_attributes(0,0,1)}}
Syntax
arr[Symbol.unscopables]
Description
The default array properties that are excluded from with
bindings are: copyWithin, entries, fill, find, findIndex, includes, keys, and values.
See {{jsxref("Symbol.unscopables")}} for how to set unscopables
for your own objects.
Examples
The following code works fine in ES5 and below. However, in ECMAScript 2015 (ES6) and later, the {{jsxref("Array.prototype.keys()")}} method was introduced. That means that inside with
environments, "keys" would now be the method and not the variable. This is where now the built-in @@unscopables
Array.prototype[@@unscopables]
symbol property comes into play and prevents that some of the Array methods are being scoped into the with
statement.
var keys = []; with(Array.protoype) { keys.push("something"); } Object.keys(Array.prototype[Symbol.unscopables]); // ["copyWithin", "entries", "fill", "find", "findIndex", // "includes", "keys", "values"]
Specifications
Specification | Status | Comment |
---|---|---|
{{SpecName('ES6', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}} | {{Spec2('ES6')}} | Initial definition. |
{{SpecName('ESDraft', '#sec-array.prototype-@@unscopables', 'Array.prototype[@@unscopables]')}} | {{Spec2('ESDraft')}} |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | {{CompatNo}} | {{CompatGeckoDesktop("48")}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("48")}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
See also
- {{jsxref("Symbol.unscopables")}}