Files
frontend-docs/docs/javascript/objects/06-symbol.md
2025-02-28 10:31:23 +03:00

44 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
sidebar_position: 6
---
# Тип данных Symbol
Символ (symbol) примитивный тип данных, использующийся для создания уникальных идентификаторов.
```js
// Создаём новый символ - id
let id = Symbol();
```
При создании, символу можно дать описание (также называемое имя), в основном использующееся для отладки кода
Символы гарантированно уникальны. Даже если мы создадим множество символов с одинаковым описанием, это всё равно будут
разные символы. Описание это просто метка, которая ни на что не влияет.
```js
let id1 = Symbol("id");
let id2 = Symbol("id");
alert(id1 == id2); // false
```
💥***Символы не преобразуются автоматически в строки***
#### Символы игнорируются циклом for…in
Свойства, чьи ключи символы, не перебираются циклом for..in.
Символы имеют два основных варианта использования:
1. «Скрытые» свойства объектов.
Если мы хотим добавить свойство в объект, который «принадлежит» другому скрипту или библиотеке, мы можем создать
символ и использовать его в качестве ключа. Символьное свойство не появится в for..in, так что оно не будет нечаянно
обработано вместе с другими. Также оно не будет модифицировано прямым обращением, так как другой скрипт не знает о
нашем символе. Таким образом, свойство будет защищено от случайной перезаписи или использования.
Так что, используя символьные свойства, мы можем спрятать что-то нужное нам, но что другие видеть не должны.
2. Существует множество системных символов, используемых внутри JavaScript, доступных как Symbol.*. Мы можем
использовать их, чтобы изменять встроенное поведение ряда объектов. Например, в дальнейших главах мы будем
использовать Symbol.iterator для итераторов, Symbol.toPrimitive для настройки преобразования объектов в примитивы и
так далее.