Array.prototype[@@unscopables]
The @@unscopables data property contains property names that were not included in the ECMAScript standard prior to the ES2015 version and that are ignored for with statement-binding purposes.
Description
The default Array properties that are ignored for with statement-binding purposes are:
See Symbol.unscopables for how to set unscopables for your own objects.
Property attributes of Array.prototype[@@unscopables] |
|
|---|---|
| Writable | no |
| Enumerable | no |
| Configurable | yes |
Example
Imagine the keys.push('something') call below is in code that was written prior to ECMAScript 2015.
When ECMAScript 2015 introduced the Array.prototype.keys() method, if the @@unscopables data property had not also been introduced, that keys.push('something') call would break — because the JavaScript runtime would have interpreted keys as being the Array.prototype.keys() method, rather than the keys array defined in the example code.
So the @@unscopables data property for Array.prototype causes the Array properties introduced in ECMAScript 2015 to be ignored for with statement-binding purposes — allowing code that was written prior to ECMAScript 2015 to continue working as expected, rather than breaking.
var keys = [];
with (Array.prototype) {
keys.push('something');
}
Object.keys(Array.prototype[Symbol.unscopables]);
// ["at", "copyWithin", "entries", "fill", "find", "findIndex",
// "includes", "keys", "values"]
Specifications
| Specification |
|---|
| ECMAScript Language Specification # sec-array.prototype-@@unscopables |
Browser compatibility
BCD tables only load in the browser