Символы в JavaScript

20.01.2020

Символ это примитивный тип в JavaScript, такой же как строка, число, null и т.д. В первые символы появились в ECMAScript 2015. Символы очень специфичный тип, как только вы создаете его, его внутреннее значение инкапсулировано и используется только для внутренних нужд. Нам остается только радоваться ссылке на объект, которую мы получили после создания символа. Чтобы создать символ, нужно вызвать глобальную функцию Symbol(). const sym = Symbol(); Каждый раз когда мы создаем символ, мы получаем новый уникальный объект, который гарантирует что будет отличаться от других объектов. Из этого вытекает следующее неравенство Symbol() === Symbol(); // false Функция Symbol может принимать строку. Эта строка будет использоваться, как описание символа. Описание символа используется только для отладки, никакой логики на него не завязано.

console.log(Symbol()) //Symbol()
console.log(Symbol('Description')) //Symbol(Description)

С учетом таких ограничений сложно придумать места где следует применять символы, одно из применений это идентификаторы свойств объекта. Символы нужны чтобы избежать совпадение имен свойств. Обратиться к свойству или методу объявленному через символ вы сможете только используя тот же самый символ, ни как иначе. Покажем это на примере.

const NAME = Symbol();
const person = {
  [NAME]: 'Jenkins'
};
console.log(person[NAME]);

При работе с символами следует учитывать следующие особенности. Символы не являются перечислимыми (enumerated), это означает если вы примените цикл for..of или for..in над объектом, то свойства и методы, объявленные в объекте, не будут обработаны. Вызывая методы Object.keys() или Object.getOwnPropertyNames(), вы точно так же не увидите символы в результате. Чтобы получить доступ ко всем свойства, определенные через символы, нужно воспользоваться методом Object.getOwnPropertySymbols().

На этом всё.

#jsbook#javascript

Еженедельная рассылка новостей

Генераторы в JavaScript

async/await в JavaScript