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/04-object-basics/08-symbol/article.md
+14-14Lines changed: 14 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,7 +10,7 @@
10
10
11
11
До цього часу ми використовували лише рядки.
12
12
13
-
А тепер давайте подивимося, які переваги можуть дати нам символи.
13
+
А тепер подивімося, які переваги можуть дати нам символи.
14
14
15
15
## Символи
16
16
@@ -22,7 +22,7 @@
22
22
let id =Symbol();
23
23
```
24
24
25
-
Після створення символу ми можемо надати йому опис (так званe ім’я символу), в основному це корисно для процесу налагодження:
25
+
Після створення символу ми можемо надати йому опис (так зване ім’я символу), в основному це корисно для процесу налагодження:
26
26
27
27
```js
28
28
// Створюємо символ id з описом (іменем) "id"
@@ -44,7 +44,7 @@ alert(id1 == id2); // false
44
44
45
45
Якщо ви знайомі з Ruby чи іншою мовою програмування, яка також має «символи» - будь ласка, не думайте що це те саме. Символи в JavaScript мають свої особливості.
46
46
47
-
Отже, підсумовуючи, символи -- це "примітивні унікальні значення" з додатковим описом. Давайте подивимося, де ми можемо їх використовувати.
47
+
Отже, підсумовуючи, символи -- це "примітивні унікальні значення" з додатковим описом. Подивімось, де ми можемо їх використовувати.
48
48
49
49
````warn header="Символи не перетворюються автоматично в рядок"
50
50
Більшість значень у JavaScript підтримують неявне перетворення в рядок. Наприклад, ми можемо помістити майже будь-яке значення в `alert`, і воно автоматично перетворить його в рядок. Символи -- вони особливі. Вони не перетворюються автоматично.
@@ -69,7 +69,7 @@ alert(id.toString()); // Symbol(id), тепер все працює
69
69
*/!*
70
70
```
71
71
72
-
Або викликати властивість `symbol.description` щоб відобразити тільки опис:
72
+
Або викликати властивість `symbol.description`, щоб відобразити тільки опис:
73
73
74
74
```js run
75
75
let id = Symbol("id");
@@ -87,7 +87,7 @@ alert(id.description); // id
87
87
88
88
Наприклад, якщо ми працюємо з `user` об’єктами, які належать сторонньому коду. Ми хотіли б додати до них ідентифікатори.
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) також ігнорує їх. Це частина загального принципу "приховування символьних властивостей". Якщо інший скрипт або бібліотека спробує перебрати наш об’єкт за допомогою цикла, він несподівано не отримає доступ до символьних властивостей.
175
+
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) також ігнорує їх. Це частина загального принципу "приховування символьних властивостей". Якщо інший скрипт або бібліотека спробує перебрати наш об’єкт за допомогою циклу, він несподівано не отримає доступ до символьних властивостей.
176
176
177
177
А ось, [Object.assign](mdn:js/Object/assign) копіює властивості рядка та символу:
178
178
@@ -187,13 +187,13 @@ let clone = Object.assign({}, user);
187
187
alert( clone[id] ); // 123
188
188
```
189
189
190
-
Тут немає парадокса. Саме так задумано. Ідея полягає в тому, що коли ми клонуємо об’єкт або об’єднуємо об’єкти, ми зазвичай хочемо скопіювати *всі* властивості (включаючи властивості з ключами в якості символу, як наприклад `id` з прикладу вище).
190
+
Тут немає парадокса. Саме так задумано. Ідея полягає в тому, що коли ми клонуємо об’єкт або об’єднуємо об’єкти, ми зазвичай хочемо скопіювати *всі* властивості (включаючи властивості з ключами-символами, як, наприклад `id` з прикладу вище).
191
191
192
192
## Глобальні символи
193
193
194
-
Як ми вже бачили, зазвичай усі символи унікальні, навіть якщо вони мають однакову назву. Але іноді ми хочемо, щоб однойменні символи були однаковими сутностями. Наприклад, різні частини нашого додатку хочуть отримати доступ до символу `"id"`, що означає абсолютно однакову властивість.
194
+
Як ми вже бачили, зазвичай усі символи унікальні, навіть якщо вони мають однакову назву. Але іноді ми хочемо, щоб однойменні символи були однаковими сутностями. Наприклад, різні частини нашого додатка хочуть отримати доступ до символу `"id"`, що означає абсолютно однакову властивість.
195
195
196
-
Для цього існує *глобальний реєстр символів*. Ми можемо створити в ньому символи і отримати до них доступ пізніше, і це гарантує, що повторні звернення з тим самим іменем нам повернуть абсолютно однаковий символ.
196
+
Для цього існує *глобальний реєстр символів*. Ми можемо створити в ньому символи та отримати до них доступ пізніше, і це гарантує, що повторні звернення з тим самим іменем нам повернуть абсолютно однаковий символ.
197
197
198
198
Для того, щоб знайти (створити, якщо його немає) символ у реєстрі, використовуйте `Symbol.for(key)`.
199
199
@@ -236,9 +236,9 @@ alert( Symbol.keyFor(sym) ); // name
236
236
alert( Symbol.keyFor(sym2) ); // id
237
237
```
238
238
239
-
`Symbol.keyFor` внутрішньо використовує глобальний реєстр символів для пошуку ключа символу. Тож це не працює для неглобальних символів. Якщо символ не глобальний, він не зможе його знайти і поверне нам `undefined`.
239
+
`Symbol.keyFor` внутрішньо використовує глобальний реєстр символів для пошуку ключа символу. Тож це не працює для не глобальних символів. Якщо символ не глобальний, він не зможе його знайти та поверне нам `undefined`.
240
240
241
-
Тим не менш, будь-які символи мають властивість `description`.
241
+
Проте, будь-які символи мають властивість `description`.
242
242
243
243
Наприклад:
244
244
@@ -274,7 +274,7 @@ alert( localSymbol.description ); // name
274
274
275
275
Символ створюється за допомогою виклику `Symbol()` з необов’язковим описом (ім’я).
276
276
277
-
Символи -- завжди унікальні, навіть якщо вони мають однакову назву. Якщо ми хочемо, щоб однойменні символи були рівними за значенням, тоді слід використовувати глобальний реєстр: `Symbol.for(key)` повертає (створює за потреби) глобальний символ з `key` в якості імені. Декілька викликів `Symbol.for` з тією ж `key` повертає той самий символ.
277
+
Символи -- завжди унікальні, навіть якщо вони мають однакову назву. Якщо ми хочемо, щоб однойменні символи були рівними за значенням, тоді слід використовувати глобальний реєстр: `Symbol.for(key)` повертає (створює за потреби) глобальний символ з ім’ям `key`. Декілька викликів `Symbol.for` з тією ж `key` повертає той самий символ.
0 commit comments