Skip to content

Commit 4df5cd1

Browse files
committed
feat(1-04-object-basics): Fix language mistakes in 08-symbol
1 parent 59cccf4 commit 4df5cd1

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

1-js/04-object-basics/08-symbol/article.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
До цього часу ми використовували лише рядки.
1212

13-
А тепер давайте подивимося, які переваги можуть дати нам символи.
13+
А тепер подивімося, які переваги можуть дати нам символи.
1414

1515
## Символи
1616

@@ -22,7 +22,7 @@
2222
let id = Symbol();
2323
```
2424

25-
Після створення символу ми можемо надати йому опис (так званe ім’я символу), в основному це корисно для процесу налагодження:
25+
Після створення символу ми можемо надати йому опис (так зване ім’я символу), в основному це корисно для процесу налагодження:
2626

2727
```js
2828
// Створюємо символ id з описом (іменем) "id"
@@ -44,7 +44,7 @@ alert(id1 == id2); // false
4444

4545
Якщо ви знайомі з Ruby чи іншою мовою програмування, яка також має «символи» - будь ласка, не думайте що це те саме. Символи в JavaScript мають свої особливості.
4646

47-
Отже, підсумовуючи, символи -- це "примітивні унікальні значення" з додатковим описом. Давайте подивимося, де ми можемо їх використовувати.
47+
Отже, підсумовуючи, символи -- це "примітивні унікальні значення" з додатковим описом. Подивімось, де ми можемо їх використовувати.
4848

4949
````warn header="Символи не перетворюються автоматично в рядок"
5050
Більшість значень у JavaScript підтримують неявне перетворення в рядок. Наприклад, ми можемо помістити майже будь-яке значення в `alert`, і воно автоматично перетворить його в рядок. Символи -- вони особливі. Вони не перетворюються автоматично.
@@ -69,7 +69,7 @@ alert(id.toString()); // Symbol(id), тепер все працює
6969
*/!*
7070
```
7171
72-
Або викликати властивість `symbol.description` щоб відобразити тільки опис:
72+
Або викликати властивість `symbol.description`, щоб відобразити тільки опис:
7373
7474
```js run
7575
let id = Symbol("id");
@@ -87,7 +87,7 @@ alert(id.description); // id
8787

8888
Наприклад, якщо ми працюємо з `user` об’єктами, які належать сторонньому коду. Ми хотіли б додати до них ідентифікатори.
8989

90-
Використаємо для цього ключ символа:
90+
Використаємо для цього ключ символу:
9191

9292
```js run
9393
let user = { // належить сторонньому коду
@@ -134,7 +134,7 @@ user.id = "Їхній ідентифікатор"
134134

135135
### Символи в літералі об’єкта
136136

137-
Якщо ми хочемо використовувати символ у літералі об’єкта `{...}`, нам потрібні обгорнути його в квадратні дужки.
137+
Якщо ми хочемо використовувати символ у літералі об’єкта `{...}`, нам потрібні обгорнути його у квадратні дужки.
138138

139139
Ось так:
140140

@@ -152,7 +152,7 @@ let user = {
152152

153153
### Символи ігноруються циклом for..in
154154

155-
Властивості в якості символів не перебираються `for..in` циклом.
155+
Властивості, які є символами, не перебираються `for..in` циклом.
156156

157157
Наприклад:
158158

@@ -172,7 +172,7 @@ for (let key in user) alert(key); // name, age (дані ключі не є си
172172
alert( "Прямий доступ: " + user[id] ); // Прямий доступ: 123
173173
```
174174

175-
[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) також ігнорує їх. Це частина загального принципу "приховування символьних властивостей". Якщо інший скрипт або бібліотека спробує перебрати наш об’єкт за допомогою циклу, він несподівано не отримає доступ до символьних властивостей.
176176

177177
А ось, [Object.assign](mdn:js/Object/assign) копіює властивості рядка та символу:
178178

@@ -187,13 +187,13 @@ let clone = Object.assign({}, user);
187187
alert( clone[id] ); // 123
188188
```
189189

190-
Тут немає парадокса. Саме так задумано. Ідея полягає в тому, що коли ми клонуємо об’єкт або об’єднуємо об’єкти, ми зазвичай хочемо скопіювати *всі* властивості (включаючи властивості з ключами в якості символу, як наприклад `id` з прикладу вище).
190+
Тут немає парадокса. Саме так задумано. Ідея полягає в тому, що коли ми клонуємо об’єкт або об’єднуємо об’єкти, ми зазвичай хочемо скопіювати *всі* властивості (включаючи властивості з ключами-символами, як, наприклад `id` з прикладу вище).
191191

192192
## Глобальні символи
193193

194-
Як ми вже бачили, зазвичай усі символи унікальні, навіть якщо вони мають однакову назву. Але іноді ми хочемо, щоб однойменні символи були однаковими сутностями. Наприклад, різні частини нашого додатку хочуть отримати доступ до символу `"id"`, що означає абсолютно однакову властивість.
194+
Як ми вже бачили, зазвичай усі символи унікальні, навіть якщо вони мають однакову назву. Але іноді ми хочемо, щоб однойменні символи були однаковими сутностями. Наприклад, різні частини нашого додатка хочуть отримати доступ до символу `"id"`, що означає абсолютно однакову властивість.
195195

196-
Для цього існує *глобальний реєстр символів*. Ми можемо створити в ньому символи і отримати до них доступ пізніше, і це гарантує, що повторні звернення з тим самим іменем нам повернуть абсолютно однаковий символ.
196+
Для цього існує *глобальний реєстр символів*. Ми можемо створити в ньому символи та отримати до них доступ пізніше, і це гарантує, що повторні звернення з тим самим іменем нам повернуть абсолютно однаковий символ.
197197

198198
Для того, щоб знайти (створити, якщо його немає) символ у реєстрі, використовуйте `Symbol.for(key)`.
199199

@@ -236,9 +236,9 @@ alert( Symbol.keyFor(sym) ); // name
236236
alert( Symbol.keyFor(sym2) ); // id
237237
```
238238

239-
`Symbol.keyFor` внутрішньо використовує глобальний реєстр символів для пошуку ключа символу. Тож це не працює для неглобальних символів. Якщо символ не глобальний, він не зможе його знайти і поверне нам `undefined`.
239+
`Symbol.keyFor` внутрішньо використовує глобальний реєстр символів для пошуку ключа символу. Тож це не працює для не глобальних символів. Якщо символ не глобальний, він не зможе його знайти та поверне нам `undefined`.
240240

241-
Тим не менш, будь-які символи мають властивість `description`.
241+
Проте, будь-які символи мають властивість `description`.
242242

243243
Наприклад:
244244

@@ -274,7 +274,7 @@ alert( localSymbol.description ); // name
274274

275275
Символ створюється за допомогою виклику `Symbol()` з необов’язковим описом (ім’я).
276276

277-
Символи -- завжди унікальні, навіть якщо вони мають однакову назву. Якщо ми хочемо, щоб однойменні символи були рівними за значенням, тоді слід використовувати глобальний реєстр: `Symbol.for(key)` повертає (створює за потреби) глобальний символ з `key` в якості імені. Декілька викликів `Symbol.for` з тією ж `key` повертає той самий символ.
277+
Символи -- завжди унікальні, навіть якщо вони мають однакову назву. Якщо ми хочемо, щоб однойменні символи були рівними за значенням, тоді слід використовувати глобальний реєстр: `Symbol.for(key)` повертає (створює за потреби) глобальний символ з ім’ям `key`. Декілька викликів `Symbol.for` з тією ж `key` повертає той самий символ.
278278

279279
Символи мають два основних варіанти використання:
280280

0 commit comments

Comments
 (0)