Symbol()
- Что такое Symbol()
- Синтаксис
- Уникальность символов
- Описание символа
- Символ как ключ объекта
- Как получить символы из объекта
- Итого
Symbol() создает значение типа symbol. Главная особенность символа - уникальность.
let id = Symbol();
console.log(typeof id);
Результат:
symbol
Символы используют, когда нужно создать уникальное значение, которое не совпадет с другим значением случайно.
Что такое Symbol()
Symbol() возвращает новый уникальный символ. Даже если создать два символа подряд, они будут разными.
let firstId = Symbol();
let secondId = Symbol();
console.log(firstId === secondId);
Результат:
false
На практике символы часто используют как особые ключи в объектах. Такие ключи не конфликтуют с обычными строковыми свойствами.
Синтаксис
Общая запись выглядит так:
Symbol(description);
description - необязательное описание символа. Оно нужно только для удобства при чтении кода и выводе в консоль.
let id = Symbol('id');
console.log(id);
Результат:
Symbol(id)
Symbol() вызывают как обычную функцию. Через new символы не создают.
let id = Symbol('id');
Уникальность символов
Описание не делает символы одинаковыми. Оно только помогает понять, для чего символ был создан.
let firstId = Symbol('id');
let secondId = Symbol('id');
console.log(firstId === secondId);
Результат:
false
Оба символа имеют описание id, но это два разных значения.
Описание символа
Описание можно получить через свойство description.
let id = Symbol('user id');
console.log(id.description);
Результат:
user id
Описание не участвует в сравнении и не превращает символ в строку. Это просто подпись для разработчика.
Символ как ключ объекта
Символ можно использовать как ключ свойства объекта. Для этого ключ записывают в квадратных скобках.
let id = Symbol('id');
let user = {
name: 'Tom',
[id]: 1
};
console.log(user[id]);
Результат:
1
Если бы мы написали id: 1 без квадратных скобок, ключом стала бы обычная строка ‘id’. Квадратные скобки говорят JavaScript взять значение из переменной id.
Свойства с ключами-символами не попадают в Object.keys().
let id = Symbol('id');
let user = {
name: 'Tom',
[id]: 1
};
console.log(Object.keys(user));
Результат:
['name']
Как получить символы из объекта
Если нужно получить символы, которые используются как ключи объекта, есть метод Object.getOwnPropertySymbols().
let id = Symbol('id');
let user = {
name: 'Tom',
[id]: 1
};
let symbols = Object.getOwnPropertySymbols(user);
console.log(symbols);
console.log(user[symbols[0]]);
Результат:
[Symbol(id)]
1
Обычно такой код нужен не на первых уроках, но полезно знать, что свойства с символами не исчезают. Они просто не показываются в списке обычных строковых ключей.
Итого
Symbol() создает уникальное значение типа symbol. Даже два символа с одинаковым описанием остаются разными.
let id = Symbol('id');
Символы чаще всего используют как уникальные ключи объектов, когда нужно не пересечься с обычными строковыми свойствами.