Skip to content

Commit cb1b000

Browse files
Make translation more clear (#668)
1 parent 9dfa028 commit cb1b000

File tree

1 file changed

+30
-30
lines changed
  • 1-js/04-object-basics/09-object-toprimitive

1 file changed

+30
-30
lines changed

1-js/04-object-basics/09-object-toprimitive/article.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,14 @@ alert(user + 500); // hint: default -> 1500
136136

137137
Якщо немає `Symbol.toPrimitive` тоді JavaScript намагається знайти методи `toString` і `valueOf`:
138138

139-
- Для `"string"` підказка: виклик методу `toString`, і якщо цей метод не існує або якщо він повертає об'єкт замість примітивного значення, то викликати `valueOf` (таким чином `toString` має пріоритет при перетворенні в рядок).
140-
- Для інших підказок: `valueOf`, і якщо це не існує або якщо він повертає об'єкт замість примітивного значення, то `toString` (таким чином `valueOf` має пріоритет для математики).
139+
- Підказка для `"string"`: виклик методу `toString`, і якщо цей метод не існує або якщо він повертає об'єкт замість примітивного значення, тоді викликати `valueOf` (таким чином `toString` має пріоритет при перетворенні в рядок).
140+
- Для інших підказок: `valueOf`, і якщо це не існує або якщо він повертає об'єкт замість примітивного значення, тоді викликати `toString` (таким чином `valueOf` має пріоритет для математичних дій).
141141

142-
Методи `toString` і `valueOf` походять з давніх часів. Вони не є символами (багато часу назад символи не існували), а скоріше є "звичними" методами, що названі за допомогою рядків. Вони забезпечують альтернативний шлях "старого стилю" для реалізації перетворення.
142+
Методи `toString` і `valueOf` походять з давніх часів. Вони не є символами (багато часу назад символи не існували), а скоріше є "звичайними" методами, що названі за допомогою рядків. Вони надають альтернативний «старомодний» спосіб реалізації перетворення.
143143

144144
Ці методи повинні повертати примітивне значення. Якщо `toString` чи `valueOf` повертає об’єкт, то він ігнорується (так само, якби цього методу не існувало).
145145

146-
За замовчуванням, простий об’єкт має слідувати методами `toString` та `valueOf`:
146+
За замовчуванням, звичайний об’єкт має наступні методи `toString` та `valueOf`:
147147

148148
- Метод `toString` повертає рядок `"[object Object]"`.
149149
- Метод `valueOf` повертає сам об’єкт.
@@ -157,11 +157,11 @@ alert(user); // [object Object]
157157
alert(user.valueOf() === user); // true
158158
```
159159

160-
Отже, якщо ми спробуємо використовувати об’єкт як рядок, наприклад в `alert` та ін., то за замовчуванням ми бачимо `[object Object]`.
160+
Отже, якщо ми спробуємо використовувати об’єкт як рядок, наприклад в `alert` та ін., то за замовчуванням ми побачимо `[object Object]`.
161161

162-
За замовчуванням метод `valueOf` згадується тут лише заради повноти, щоб уникнути будь-якої плутанини. Як ви бачите, він повертає сам об’єкт, і тому ігнорується. Не питайте мене, чому це для історичних причин. Тому ми можемо припустити, що цього не існує.
162+
За замовчуванням метод `valueOf` згадується тут лише заради повноти картини, щоб уникнути будь-якої плутанини. Як бачите, він повертає сам об’єкт, і тому ігнорується з історичних причин. Тож ми можемо припустити, що його не існує.
163163

164-
Реалізуємо ці методи для налаштування перетворення.
164+
Давайте реалізуємо ці методи, щоб налаштувати перетворення.
165165

166166
Наприклад, тут `user` робить те ж саме, що й вище, використовуючи комбінацію `toString` і `valueOf` замість `Symbol.toPrimitive`:
167167

@@ -187,9 +187,9 @@ alert(+user); // valueOf -> 1000
187187
alert(user + 500); // valueOf -> 1500
188188
```
189189

190-
Як ми бачимо, поведінка така ж, як і в попередньому прикладі з `Symbol.toPrimitive`.
190+
Як бачимо, поведінка така ж, як і в попередньому прикладі з `Symbol.toPrimitive`.
191191

192-
Часто ми хочемо, щоб в одному місці перехоплювалися та оброблялися всі перетворення в примітиви. У цьому випадку ми можемо реалізувати `toString`, як, наприклад:
192+
Часто нам потрібне єдине «універсальне» місце для обробки всіх перетворень примітивів. У цьому випадку ми можемо реалізувати тільки `toString`, ось так:
193193

194194
```js run
195195
let user = {
@@ -204,29 +204,29 @@ alert(user); // toString -> Іван
204204
alert(user + 500); // toString -> Іван500
205205
```
206206

207-
За відсутності `Symbol.toPrimitive` і `valueOf`, `toString` буде обробляти всі примітивні перетворення.
207+
За відсутності `Symbol.toPrimitive` і `valueOf`, `toString` буде обробляти всі перетворення примітивів.
208208

209209
### Перетворення може повернути будь-який примітивний тип
210210

211-
Важливо знати про всі методи примітивні перетворення те, що вони не обов’язково повертають "підказаний" примітив.
211+
Важливо знати про всі методи перетворення примітивів, що вони не обов’язково повертають "підказаний" примітив.
212212

213-
Немає контролю, чи повертає `toString` саме рядок, або чи `symbol.toprimitive` метод повертає номер для підказки `"number"`.
213+
Немає контролю, чи повертає `toString` саме рядок, або чи `symbol.toprimitive` метод повертає число для підказки `"number"`.
214214

215215
Єдина обов’язкова річ: ці методи повинні повертати примітивний тип, а не об’єкт.
216216

217217
```smart header="Історичні нотатки"
218-
З історичних причин, якщо `toString` чи `valueOf` повертає об’єкт. В цьому немає помилки, але таке значення ігнорується (так само, якби цей метод не існував). Це тому, що в давнину в JavaScript не було хорошого концепту "помилка".
218+
З історичних причин, якщо `toString` чи `valueOf` повертає об’єкт,це не є помилкою, але таке значення ігнорується (так само, якби цей метод не існував). Це тому, що в давнину в JavaScript не було хорошого концепту "помилка".
219219
220-
Навпаки, `Symbol.toPrimitive` *повинен* повернути примітив, інакше буде помилка.
220+
На противагу цьому, `Symbol.toPrimitive` суворіший, він *повинен* повернути примітив, інакше буде помилка.
221221
```
222222

223223
## Подальші перетворення
224224

225-
Як ми вже знаємо, багато операторів та функцій виконують перетворення типу, наприклад, множення `*` перетворює операнди в цифри.
225+
Як ми вже знаємо, багато операторів та функцій виконують перетворення типів, наприклад, множення `*` перетворює операнди в числа.
226226

227-
Якщо ми передамо об’єкт як аргумент, то є два етапи:
227+
Якщо ми передамо об’єкт як аргумент, то відбувається два етапи обчислень:
228228
1. Об’єкт перетворюється на примітив (використовуючи правила, описані вище).
229-
2. Якщо отриманий примітив не є правильним типом, він перетворюється.
229+
2. Якщо це необхідно для подальших обчислень, то отриманий примітив також перетворюється.
230230

231231
Наприклад:
232232

@@ -238,13 +238,13 @@ let obj = {
238238
}
239239
};
240240

241-
alert(obj * 2); // 4, об’єкт перетворився на примітив "2", потім множення зробило це числом
241+
alert(obj * 2); // 4, об’єкт перетворено на примітив "2", потім множенням отримано число
242242
```
243243

244244
1. Множення `obj * 2` спочатку перетворює об’єкт в примітив (це рядок `"2"`).
245-
2. Тоді `"2" * 2` стає `2 * 2` (рядок перетворюється на номер).
245+
2. Тоді `"2" * 2` стає `2 * 2` (рядок перетворюється на число).
246246

247-
Бінарний плюс буде об’єднувати рядки в такій же ситуації, оскільки він приймає рядки:
247+
Бінарний плюс буде об’єднувати рядки в такій же ситуації, оскільки він з радістю приймає рядки:
248248

249249
```js run
250250
let obj = {
@@ -258,23 +258,23 @@ alert(obj + 2); // 22 ("2" + 2), перетворення до примітив
258258

259259
## Підсумки
260260

261-
Об’єктно-примітивне перетворення викликається автоматично багатьма вбудованими функціями та операторами, які очікують примітиву як значення.
261+
Перетворення об’єкта на примітив викликається автоматично багатьма вбудованими функціями та операторами, які очікують примітив як значення.
262262

263-
Є 3 типи (підказки) цього:
263+
Існує 3 типи (підказки) цього перетворення:
264264
- `"string"` (для `alert` та інших операцій, які потребують рядка)
265265
- `"number"` (для математичних операцій)
266-
- `"default"` (кілька операторів, зазвичай об’єкти реалізують це так само як і `"number"`.)
266+
- `"default"` (мало операторів, зазвичай об’єкти реалізують це так само як і `"number"`.)
267267

268268
Специфікація явно описує, який оператор використовує яку підказку.
269269

270-
Алгоритм перетворення це:
270+
Алгоритм перетворення наступний:
271271

272272
1. Викликати `obj[Symbol.toPrimitive](hint)`, якщо метод існує,
273-
2. Інакше, якщо підказка -- це `"string"`
274-
- спробувати `obj.toString()` або `obj.valueOf()`, залежно від того, що існує.
275-
3. Інакше, якщо підказка -- це `"number"` чи `"default"`
276-
- спробувати `obj.valueOf()` або `obj.toString()`, залежно від того, що існує.
273+
2. Інакше, якщо підказка -- має значення `"string"`
274+
- спробувати викликати `obj.toString()` або `obj.valueOf()`, залежно від того, що існує.
275+
3. Інакше, якщо підказка -- має значення `"number"` чи `"default"`
276+
- спробувати викликати `obj.valueOf()` або `obj.toString()`, залежно від того, що існує.
277277

278-
Усі ці методи повинні повернути примітив до роботи (якщо визначені).
278+
Усі ці методи повинні повертати примітив (якщо визначені).
279279

280-
На практиці досить часто для реалізації достатньо лише `obj.toString()` як універсального методу для перетворення рядків, який повинен повернути "читабельне для людини" представлення об’єкта, для цілей логування або пошуку помилок.
280+
На практиці часто достатньо реалізувати лише `obj.toString()` як універсальний метод для перетворення рядків, який повинен повернути "читабельне для людини" представлення об’єкта, для цілей логування або пошуку помилок.

0 commit comments

Comments
 (0)