Поиск…
Синтаксис
- Условное обозначение()
- Символ (описание)
- Symbol.toString ()
замечания
Спецификация ECMAScript 2015 19.4 Символы
Основы символьного примитивного типа
Symbol
- новый примитивный тип в ES6. Символы используются в основном как ключи свойств , и одна из его основных характеристик заключается в том, что они уникальны , даже если они имеют одинаковое описание. Это означает, что у них никогда не будет столкновения имени с любым другим ключом свойства, который является symbol
или string
.
const MY_PROP_KEY = Symbol();
const obj = {};
obj[MY_PROP_KEY] = "ABC";
console.log(obj[MY_PROP_KEY]);
В этом примере результатом console.log
будет ABC
.
Вы также можете иметь названные символы:
const APPLE = Symbol('Apple');
const BANANA = Symbol('Banana');
const GRAPE = Symbol('Grape');
Каждое из этих значений уникально и не может быть переопределено.
Предоставление необязательного параметра (description)
при создании примитивных символов может использоваться для отладки, но не для доступа к самому символу (но см. Symbol.for()
для способа регистрации / поиска глобальных общих символов).
Преобразование символа в строку
В отличие от большинства других объектов JavaScript, символы не преобразуются автоматически в строку при выполнении конкатенации.
let apple = Symbol('Apple') + ''; // throws TypeError!
Вместо этого они должны быть явно преобразованы в строку при необходимости (например, чтобы получить текстовое описание символа, которое может использоваться в сообщении отладки) с помощью метода toString
или конструктора String
.
const APPLE = Symbol('Apple');
let str1 = APPLE.toString(); // "Symbol(Apple)"
let str2 = String(APPLE); // "Symbol(Apple)"
Использование Symbol.for () для создания глобальных общих символов
Метод Symbol.for
позволяет вам регистрироваться и искать глобальные символы по имени. При первом вызове с заданным ключом он создает новый символ и добавляет его в реестр.
let a = Symbol.for('A');
В следующий раз, когда вы Symbol.for('A')
, тот же символ будет возвращен вместо нового (в отличие от Symbol('A')
который создаст новый уникальный символ, который имеет одно и то же описание ).
a === Symbol.for('A') // true
но
a === Symbol('A') // false