update objects
This commit is contained in:
44
docs/javascript/objects/06-symbol.md
Normal file
44
docs/javascript/objects/06-symbol.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
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 для настройки преобразования объектов в примитивы и
|
||||
так далее.
|
||||
Reference in New Issue
Block a user