20.4.1 Конструктор Знака (Symbol)
Конструктор Знака (Symbol):
- является %Symbol%.
- имеет начальное значение свойства «Symbol» глобального объекта.
- возвращает новое значение Знака при вызове как функции.
- не предназначен для использования с оператором
new
. - не предназначен для разделения на подклассы.
- может использоваться как значение предложения
extends
определения класса, но его вызовsuper
вызовет исключение.
20.4.1.1 Symbol ( [ description ] )
Когда Symbol вызывается с необязательным аргументом description, выполняются следующие шаги:
1. Если NewTarget не является undefined (неопределенным), выбросить исключение TypeError. 2. Если описание description является undefined, пусть descString будет undefined. 3. Иначе пусть descString будет ? ToString(description). 4. Верните новое уникальное значение Знака, значение [[Description]] которого равно descString.
20.4.2 Свойства конструктора Знака (Symbol)
Конструктор Знака (Symbol):
- имеет внутренний слот [[Prototype]], значение которого — %Function.prototype%.
- обладает следующими свойствами:
20.4.2.1 Symbol.asyncIterator 20.4.2.2 Symbol.for ( key ) 20.4.2.3 Symbol.hasInstance 20.4.2.4 Symbol.isConcatSpreadable 20.4.2.5 Symbol.iterator 20.4.2.6 Symbol.keyFor ( sym ) 20.4.2.7 Symbol.match 20.4.2.8 Symbol.matchAll 20.4.2.9 Symbol.prototype 20.4.2.10 Symbol.replace 20.4.2.11 Symbol.search 20.4.2.12 Symbol.species 20.4.2.13 Symbol.split 20.4.2.14 Symbol.toPrimitive 20.4.2.15 Symbol.toStringTag 20.4.2.16 Symbol.unscopables
20.4.2.1 Symbol.asyncIterator
Начальным значением Symbol.asyncIterator
является хорошо известный символ @@asyncIterator (Таблица 1).
Это свойство имеет атрибуты { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false }.
20.4.2.2 Symbol.for ( key )
Когда Symbol.for
вызывается с аргументом key, она выполняет следующие шаги:
1. Пусть stringKey будет ? ToString(key). 2. Для каждого элемента e списка GlobalSymbolRegistry Списка выполните а. Если SameValue(e.[[Key]], stringKey) является true, вернуть e.[[Symbol]]. 3. Утверждено: GlobalSymbolRegistry в настоящее время не содержит записи для stringKey. 4. Пусть newSymbol будет новым уникальным значением знака Symbol, значение [[Description]] которого равно stringKey. 5. Добавьте Запись {[[Key]]: stringKey, [[Symbol]]: newSymbol} в Список GlobalSymbolRegistry. 6. Верните newSymbol.
GlobalSymbolRegistry — это Список, доступный глобально (во всем мире). Его разделяют все области. Перед оценкой любого кода ECMAScript он инициализируется как новый пустой Список. Элементами GlobalSymbolRegistry являются записи со структурой, определенной в таблице 64.
Field Name (Имя поля) | Value (Значение) | Usage (Использование) |
---|---|---|
[[Key]] | Строка String | Строковый ключ, используемый для глобальной идентификации Знака. |
[[Symbol]] | Знак Symbol | Знак, который можно получить из любой области. |
20.4.2.3 Symbol.hasInstance
Начальным значением Symbol.hasInstance является хорошо известный символ @@hasInstance (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.4 Symbol.isConcatSpreadable
Начальным значением Symbol.isConcatSpreadable является хорошо известный символ @@isConcatSpreadable (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.5 Symbol.iterator
Начальным значением Symbol.iterator является хорошо известный символ @@iterator (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.6 Symbol.keyFor ( sym )
Когда Symbol.keyFor вызывается с аргументом sym, он выполняет следующие шаги:
1. Если Тип(sym) не является Знаком (Symbol), выбросить исключение TypeError. 2. Для каждого элемента e Списка GlobalSymbolRegistry (см. 20.4.2.2) выполните а. Если SameValue(e.[[Symbol]], sym) является true, вернуть e.[[Key]]. 3. Утверждено: GlobalSymbolRegistry в настоящее время не содержит записи для sym. 4. Вернуть undefined.
20.4.2.7 Symbol.match
Начальным значением Symbol.match является хорошо известный символ @@match (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.8 Symbol.matchAll
Начальным значением Symbol.matchAll является хорошо известный символ @@matchAll (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.9 Symbol.prototype
Начальным значением Symbol.prototype является объект-прототип Symbol.
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.10 Symbol.replace
Начальным значением Symbol.replace является хорошо известный символ @@replace (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.11 Symbol.search
Начальным значением Symbol.search является хорошо известный символ @@search (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.12 Symbol.species
Начальным значением Symbol.species является хорошо известный символ @@pecies (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.13 Symbol.split
Начальным значением Symbol.split является хорошо известный символ @@split (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.14 Symbol.toPrimitive
Начальным значением Symbol.toPrimitive является хорошо известный символ @@toPrimitive (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.15 Symbol.toStringTag
Начальным значением Symbol.toStringTag является хорошо известный символ @@toStringTag (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.2.16 Symbol.unscopables
Начальным значением Symbol.unscopables является хорошо известный символ @@unscopables (Таблица 1).
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false}.
20.4.3 Свойства объекта прототипа Знака
Объект-прототип Знака (Symbol prototype object):
- это %Symbol.prototype%.
- это обычный объект.
- не является экземпляром символа и не имеет внутреннего слота [[SymbolData]].
- имеет внутренний слот [[Prototype]], значение которого %Object.prototype%.
Абстрактная операция thisSymbolValue принимает аргумент value. При вызове она выполняет следующие шаги:
1. Если Тип(value) - это Знак, вернуть value. 2. Если Тип(value) - это Объект, а value имеет внутренний слот [[SymbolData]], тогда а. Пусть s будет value.[[SymbolData]]. b. Утверждено: Тип(ы) - это Знак. c. Вернуть s. 3. Выбросить исключение TypeError.
20.4.3.1 Symbol.prototype.constructor 20.4.3.2 get Symbol.prototype.description 20.4.3.3 Symbol.prototype.toString ( ) 20.4.3.4 Symbol.prototype.valueOf ( ) 20.4.3.5 Symbol.prototype [ @@toPrimitive ] ( hint ) 20.4.3.6 Symbol.prototype [ @@toStringTag ]
20.4.3.1 Symbol.prototype.constructor
Начальное значение Symbol.prototype.constructor — %Symbol%.
20.4.3.2 get Symbol.prototype.description
Symbol.prototype.description — это свойство доступа, для которого функция доступа set не определена (является undefined). Его функция доступа get выполняет следующие шаги:
1. Пусть s будет значением this. 2. Пусть sym будет ? thisSymbolValue(s). 3. Вернуть sym.[[Description]].
20.4.3.3 Symbol.prototype.toString ( )
Выполняются следующие шаги:
1. Пусть sym будет ? thisSymbolValue(значение this). 2. Вернуть SymbolDescriptiveString(sym).
20.4.3.3.1 SymbolDescriptiveString ( sym )
Абстрактная операция SymbolDescriptiveString принимает аргумент sym (Знак). При вызове она выполняет следующие шаги:
1. Пусть desc будет значением [[Description]] знака sym.
2. Если desc не определено (является undefined), установите для desc пустую Строку.
3. Утверждено: Тип(desc) является Строкой.
4. Верните конкатенацию строк из "Symbol("
, desc и ")".
20.4.3.4 Symbol.prototype.valueOf ( )
Выполняются следующие шаги:
1. Вернуть ? thisSymbolValue(значение this).
20.4.3.5 Symbol.prototype [ @@toPrimitive ] ( hint )
Эта функция вызывается операторами языка ECMAScript для преобразования объекта Symbol в примитивное значение.
Когда метод @@toPrimitive вызывается с аргументом подсказки hint, выполняются следующие шаги:
1. Вернуть ? thisSymbolValue(значение this).
Значение свойства «name» этой функции — "[Symbol.toPrimitive]"
.
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true}.
Аргумент игнорируется.
20.4.3.6 Symbol.prototype [ @@toStringTag ]
Начальным значением свойства @@toStringTag является строковое значение «Symbol».
Это свойство имеет атрибуты {[[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true}.
20.4.4 Свойства экземпляров Знака (Symbol)
Экземпляры Знаков — это обычные объекты, наследующие свойства от объекта-прототипа Symbol. Экземпляры символов имеют внутренний слот [[SymbolData]]. Внутренний слот [[SymbolData]] — это значение Знака, представленное этим объектом Знака.
Информационные ссылки
Стандарт ECMAScript — Раздел «20.4 Symbol Objects» — https://tc39.es/ecma262/#sec-symbol-objects