Spec-Zone.ru › JavaScript

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, продолжать работать должным образом, а не ломаться.

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-array.prototype-%symbol.unscopables%

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

Десктопные Мобильные Серверные
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
  • Руководство по индексированным коллекциям
  • Array
  • with
  • Symbol.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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API