This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Symbol.unscopables
Широко известный символSymbol.unscopables используется для указания значения объекта, чьи собственные и наследуемые имена свойств исключаются из привязок связанного объекта оператораwith.
Атрибуты свойстваSymbol.unscopables | |
|---|---|
| Записываемое | нет |
| Перечисляемое | нет |
| Настраиваемое | нет |
In this article
Описание
Символ @@unscopables (Symbol.unscopables) может быть определён к любому объекту, чтобы исключить имена свойств из-за того, что они отображаются как лексические переменные с привязкой окруженияwith. Обратите внимание: если использовать"Строгий режим", операторwith будет недоступен и вероятнее всего также не понадобится этот символ.
Если вы зададите свойству значениеtrue в объектеunscopables сделает его "unscopable" и, следовательно, оно не будет задействовано в области лексических переменных. Придав свойству значениеfalse, Вы сделаете егоscopable и, как следствие, оно будет задействовано в области лексических переменных.
Примеры
Приведённый код отлично работает в ES5 и ниже. Однако в ECMAScript 2015 и более поздних версиях был введён методArray.prototype.keys(). Это означает, что внутри окруженияwith, "ключи" будут методом, а не переменной. Вот где теперь встроенные свойства символаArray.prototype[@@unscopables] вступают в игру и препятствуют тому, чтобы некоторые из методов Array были включены в операторwith.
var keys = [];with (Array.prototype) { keys.push("что-то");}Object.keys(Array.prototype[Symbol.unscopables]);// ["copyWithin", "entries", "fill", "find", "findIndex",// "includes", "keys", "values"]Вы также можете задать unscopables для собственных объектов.
var obj = { foo: 1, bar: 2,};obj[Symbol.unscopables] = { foo: false, bar: true,};with (obj) { console.log(foo); // 1 console.log(bar); // ReferenceError: bar is not defined}Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-symbol.unscopables> |
Совместимость с браузерами
Смотрите также
Array.prototype[@@unscopables]- оператор
with(не доступен врежиме Strict)