Array.prototype[Symbol.unscopables]
Базовый уровень Ограниченная доступность
Эта функция не является базовой, поскольку она не работает в некоторых из наиболее широко используемых браузеров.
Свойство данных [Symbol.unscopables] объекта Array.prototype является общим для всех экземпляров Array. Оно содержит имена свойств, которые не были включены в стандарт ECMAScript до версии ES2015 и которые игнорируются для целей связывания оператора with.
Значение
Объект null-прототипа с именами свойств, указанными ниже, и их значениями, установленными в true.
Атрибуты свойства Array.prototype[Symbol.unscopables]
| |
|---|---|
| Доступно для записи | нет |
| Перечисляемо | нет |
| Конфигурируемо | да |
Описание
Свойства Array по умолчанию, которые игнорируются для целей связывания оператора with:
at()copyWithin()entries()fill()find()findIndex()findLast()findLastIndex()flat()flatMap()includes()keys()toReversed()toSorted()toSpliced()values()
Array.prototype[Symbol.unscopables] — это пустой объект, содержащий только все перечисленные выше имена свойств со значением true. Его прототипом является null, поэтому свойства Object.prototype, такие как toString, случайно не будут сделаны неучитываемыми (unscopable), и toString() внутри оператора with будет по-прежнему вызываться для массива.
Смотрите Symbol.unscopables, чтобы узнать, как установить неучитываемые свойства для ваших собственных объектов.
Примеры
Представьте, что вызов values.push('something') ниже находится в коде, написанном до ECMAScript 2015.
var values = [];
with (values) {
values.push("something");
}
Когда ECMAScript 2015 представил метод Array.prototype.values(), оператор with в приведенном выше коде начал интерпретировать values как метод массива values.values вместо внешней переменной values. Вызов values.push('something') привел бы к сбою, потому что теперь он получает доступ к push в методе values.values. Это привело к сообщению об ошибке в Firefox (Ошибка Firefox 883914).
Таким образом, свойство данных [Symbol.unscopables] для Array.prototype приводит к тому, что свойства Array, введенные в ECMAScript 2015, игнорируются для целей связывания оператора with, что позволяет коду, написанному до ECMAScript 2015, продолжать работать должным образом, а не ломаться.
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | Серверные | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
@@unscopables |
38 |
12 |
48 |
25 |
10 |
38 |
48 |
25 |
10 |
3.0 |
38 |
10 |
1.0.0 |
1.0 |
0.12.0 |
Смотрите также
- Полифилл
Array.prototype[Symbol.unscopables]вcore-js - Руководство по индексированным коллекциям
ArraywithSymbol.unscopables
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Symbol.unscopables