Поиск…


Синтаксис

  • Условное обозначение()
  • Символ (описание)
  • 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow