Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Стандартные встроенные объекты
  5. Symbol
  6. Symbol.unscopables

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Symbol.unscopables

Широко известный символSymbol.unscopables используется для указания значения объекта, чьи собственные и наследуемые имена свойств исключаются из привязок связанного объекта оператораwith.

Атрибуты свойстваSymbol.unscopables
Записываемоенет
Перечисляемоенет
Настраиваемоенет

Описание

Символ @@unscopables (Symbol.unscopables) может быть определён к любому объекту, чтобы исключить имена свойств из-за того, что они отображаются как лексические переменные с привязкой окруженияwith. Обратите внимание: если использовать"Строгий режим", операторwith будет недоступен и вероятнее всего также не понадобится этот символ.

Если вы зададите свойству значениеtrue в объектеunscopables сделает его "unscopable" и, следовательно, оно не будет задействовано в области лексических переменных. Придав свойству значениеfalse, Вы сделаете егоscopable и, как следствие, оно будет задействовано в области лексических переменных.

Примеры

Приведённый код отлично работает в ES5 и ниже. Однако в ECMAScript 2015 и более поздних версиях был введён методArray.prototype.keys(). Это означает, что внутри окруженияwith, "ключи" будут методом, а не переменной. Вот где теперь встроенные свойства символаArray.prototype[@@unscopables] вступают в игру и препятствуют тому, чтобы некоторые из методов Array были включены в операторwith.

js
var keys = [];with (Array.prototype) {  keys.push("что-то");}Object.keys(Array.prototype[Symbol.unscopables]);// ["copyWithin", "entries", "fill", "find", "findIndex",//  "includes", "keys", "values"]

Вы также можете задать unscopables для собственных объектов.

js
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

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp