You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/10-es-modern/8-symbol/article.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,7 @@ alert( typeof sym ); // symbol
25
25
```
26
26
27
27
28
-
Каждый символ -- уникален. У функции `Symbol` есть необязательный аргумент "имя символа". Можно его использовать для описания символа, в целях отладки:
28
+
Каждый символ -- уникален. У функции `Symbol` есть необязательный аргумент "имя символа". Его можно использовать для описания символа, в целях отладки:
29
29
30
30
```js
31
31
//+ run
@@ -35,7 +35,7 @@ let sym = Symbol("name");
35
35
alert( sym.toString() ); // Symbol(name)
36
36
```
37
37
38
-
...Но при этом если у двух символов одинаковое имя, то это не значит, что они равны:
38
+
...Но при этом, если у двух символов одинаковое имя, то это не значит, что они равны:
Существует "глобальный реестр" символов, который позволяет, при необходимости, разделять символы между частями программы.
49
+
Существует "глобальный реестр" символов, который позволяет, при необходимости, передавать символы между частями программы.
50
50
51
51
Для чтения (или создания, при отсутствии) "глобального" символа служит вызов `Symbol.for(имя)`.
52
52
@@ -63,7 +63,7 @@ let name = Symbol.for("name");
63
63
alert( Symbol.for("name") == name ); // true
64
64
```
65
65
66
-
Вызов `Symbol.for` возвращает символ по имени. Обратным для него является вызов `Symbol.keyFor(sym)` позволяет получить по глобальному символу его имя:
66
+
Вызов `Symbol.for` возвращает символ по имени. Обратным для него является вызов `Symbol.keyFor(sym)`, который позволяет получить по глобальному символу его имя:
Кроме того, свойство-символ недоступно, если обратиться к его названию: `user.isAdmin` не существует.
131
131
132
-
Зачем всё это, почему не просто использовать строки?
132
+
Зачем всё это, почему просто не использовать строки?
133
133
134
134
Резонный вопрос. На ум могут прийти соображения производительности, так как символы -- это по сути специальные идентификаторы, они компактнее, чем строка. Но при современных оптимизациях объектов это редко имеет значение.
135
135
136
-
Самое широкое применение символов предусмотрено внутри самого стандарта JavaScript. В современном стандарте есть много системных символов. Их список есть в спецификации, в таблице [Well-known Symbols](http://www.ecma-international.org/ecma-262/6.0/index.html#table-1). В спецификации принято символы для краткости обозначать их как '@@имя', например `@@iterator`, но доступны они как свойства `Symbol`.
136
+
Самое широкое применение символов предусмотрено внутри самого стандарта JavaScript. В современном стандарте есть много системных символов. Их список есть в спецификации, в таблице [Well-known Symbols](http://www.ecma-international.org/ecma-262/6.0/index.html#table-1). В спецификации для краткости символы принято обозначать как '@@имя', например `@@iterator`, но доступны они как свойства `Symbol`.
<li>Символы -- новый примитивный тип, предназначенный для уникальных идентификаторов.</li>
201
-
<li>Все символы уникальны, символы с одинаковым именем не равны друг другу.</li>
201
+
<li>Все символы уникальны. Символы с одинаковым именем не равны друг другу.</li>
202
202
<li>Существует глобальный реестр символов, доступных через метод `Symbol.for(name)`. Для глобального символа можно получить имя вызовом и `Symbol.keyFor(sym)`.</li>
203
203
</ul>
204
204
205
205
Основная область использования символов -- это системные свойства объектов, которые задают разные аспекты их поведения. Поддержка у них пока небольшая, но она растёт. Системные символы позволяют разработчикам стандарта добавлять новые "особые" свойства объектов, при этом не резервируя соответствующие строковые значения.
206
206
207
207
Системные символы доступны как свойства функции `Symbol`, например `Symbol.iterator`.
208
208
209
-
Мы можем создавать и свои символы, использовать их в объектах. Записывать их как свойства `Symbol`, разумеется, нельзя, если нужен глобально доступный символ, то используется `Symbol.for(имя)`.
209
+
Мы можем создавать и свои символы, использовать их в объектах. Записывать их как свойства `Symbol`, разумеется, нельзя. Если нужен глобально доступный символ, то используется `Symbol.for(имя)`.
0 commit comments