Skip to content

Commit 9d4beab

Browse files
authored
Merge pull request #561 from ltlaitoff/fix-language-errors-in-1-js-04-object-basics
fix(1-js-04): Fix language errors in 1-js 04-object-basics
2 parents 48e170e + 1185a9a commit 9d4beab

File tree

11 files changed

+62
-61
lines changed

11 files changed

+62
-61
lines changed

1-js/04-object-basics/01-object/article.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ alert( bag.apple ); // 5 якщо fruit="apple"
181181

182182
І якщо відвідувач введе слово `"apple"`, то в об’єкті `bag` тепер буде лежати властивість `{apple: 5}`.
183183

184-
По суті, це працює так само, як:
184+
По суті, це працює так само як:
185185
```js run
186186
let fruit = prompt("Які фрукти купити?", "apple");
187187
let bag = {};
@@ -192,7 +192,7 @@ bag[fruit] = 5;
192192

193193
... Але виглядає приємніше.
194194

195-
Ми можемо використати більш складні вирази в квадратних дужках:
195+
Ми можемо використати складніші вирази у квадратних дужках:
196196

197197
```js
198198
let fruit = 'apple';
@@ -205,7 +205,7 @@ let bag = {
205205

206206
Тому більшість часу, коли назви властивостей відомі та прості, використовується крапка. А якщо нам потрібно щось складніше, то переходимо до квадратних дужок.
207207

208-
## Властивість з змінної
208+
## Властивість зі змінної
209209

210210
У реальному коді ми часто використовуємо наявні змінні як значення для імен властивостей.
211211

@@ -224,7 +224,7 @@ let user = makeUser("Іван", 30);
224224
alert(user.name); // Іван
225225
```
226226

227-
В наведеному вище прикладі назва властивостей `name` і `age` збігаються з назвами змінних, які ми підставляємо в якості значень цих властивостей. Такий підхід настільки поширений, що існують спеціальні *короткі властивості* для спрощення цього запису.
227+
В наведеному вище прикладі назва властивостей `name` і `age` збігаються з назвами змінних, які ми підставляємо як значення цих властивостей. Такий підхід настільки поширений, що існують спеціальні *короткі властивості* для спрощення цього запису.
228228

229229
Замість `name: name` ми можемо написати просто `name`:
230230

@@ -452,7 +452,7 @@ for (let prop in user) {
452452
}
453453
```
454454
455-
Таким чином, щоб вирішити нашу проблему з телефонними кодами, ми можемо схитрувати, зробивши коди не цілочисельними властивостями. Додамо знак `"+"` перед кожним кодом.
455+
Таким чином, щоб розв'язати нашу проблему з телефонними кодами, ми можемо схитрувати, зробивши коди не цілочисельними властивостями. Додамо знак `"+"` перед кожним кодом.
456456
457457
Приклад:
458458
@@ -500,4 +500,4 @@ for (let code in codes) {
500500
501501
У них є свої особливості, які ми вивчимо пізніше. Іноді люди говорять щось на кшталт "тип даних Array" або "тип даних Date", але формально вони не є окремими типами, а належать до типу даних `"Object"`. Вони лише розширюють його різними способами.
502502
503-
Об’єкти в JavaScript дуже потужні. Тут ми тільки трохи заглибилися в дійсно величезну тему. Ми будемо тісно працювати з об’єктами і дізнаємося про них більше в наступних частинах підручника.
503+
Об’єкти в JavaScript дуже потужні. Тут ми тільки трохи заглибилися в дійсно величезну тему. Ми будемо тісно працювати з об’єктами та дізнаємося про них більше в наступних частинах посібника.

1-js/04-object-basics/02-object-copy/article.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ let phrase = message;
1717

1818
![](variable-copy-value.svg)
1919

20-
Цілком очікуванний результат, згодні?
20+
Цілком очікуваний результат, згодні?
2121

2222
Об’єкти поводяться інакше.
2323

@@ -73,13 +73,13 @@ admin.name = 'Петро'; // змінено за посиланням зі зм
7373
alert(*!*user.name*/!*); // 'Петро', зміни видно з посилання зі змінної "user"
7474
```
7575
76-
Уявіть, що об’єкт -- це шафа з якимись данними (властивостями). А "адреса" цієї шафи зберігається у двох шухлядах. Спочатку ми використовуємо одну з них (`admin`), щоб дістатися цієї шафи та щось змінити. Потім, якщо ми використаємо іншу шухляду (`user`), ми все ще відкриємо ту саму шафу і отримаємо доступ до зміненого вмісту.
76+
Уявіть, що об’єкт -- це шафа з якимись даними (властивостями). А "адреса" цієї шафи зберігається у двох шухлядах. Спочатку ми використовуємо одну з них (`admin`), щоб дістатися цієї шафи та щось змінити. Потім, якщо ми використаємо іншу шухляду (`user`), ми все ще відкриваємо ту саму шафу й отримуємо доступ до зміненого вмісту.
7777
7878
## Порівняння за посиланням
7979
8080
Два об’єкти рівні, лише якщо це той самий об’єкт.
8181
82-
Наприклад, тут `a` і` b` посилаються на той самий об’єкт, отже, вони рівні:
82+
Наприклад, тут `a` і `b` посилаються на один об’єкт, отже, вони рівні:
8383
8484
```js run
8585
let a = {};
@@ -98,7 +98,7 @@ let b = {}; // два незалежні об’єкти
9898
alert( a == b ); // false
9999
```
100100
101-
Для порівнянь, таких як `obj1 > obj2`, або для порівняння з примітивом `obj == 5`, об’єкти перетворюються на примітиви. Незабаром ми вивчимо, як працюють перетворення об’єктів, але правду кажучи, такі порівняння потрібні вкрай рідко зазвичай вони з’являються в результаті неправильного програмування.
101+
Для порівнянь, таких як `obj1 > obj2`, або для порівняння з примітивом `obj == 5`, об’єкти перетворюються на примітиви. Незабаром ми вивчимо, як працюють перетворення об’єктів, але чесно кажучи, такі порівняння потрібні вкрай рідко -- зазвичай вони з’являються через помилки у коді.
102102
103103
````smart header="Об’єкти у const-змінних можна змінювати"
104104
Важливим побічним ефектом зберігання об’єктів як посилань є те, що об’єкт, оголошений як `const`, *може* бути змінений.
@@ -121,7 +121,7 @@ alert(user.name); // Петро
121121

122122
Інакше кажучи, `const user` видає помилку, лише якщо ми намагаємося присвоїти у саму змінну інше значення: `user = ...`.
123123

124-
Тим не менш, якщо нам дійсно потрібно створювати незмінні властивості об’єкта, це також можливо, але з використанням зовсім інших методів. Про це ми згадаємо у розділі <info:property-descriptors>.
124+
Проте, якщо нам дійсно потрібно створювати незмінні властивості об’єкта, це також можливо, але з використанням зовсім інших методів. Про це ми згадаємо у розділі <info:property-descriptors>.
125125
````
126126

127127
## Клонування та злиття об’єктів, Object.assign [#cloning-and-merging-object-assign]
@@ -130,7 +130,7 @@ alert(user.name); // Петро
130130

131131
Але що, якщо нам потрібно створити копію, клон об'єкта?
132132
133-
Але якщо ми насправді цього хочемо, то нам потрібно створити новий об’єкт і відтворити структуру існуючого, перебираючи та копіюючи його властивості.
133+
Але якщо ми насправді цього хочемо, то нам потрібно створити новий об’єкт і відтворити структуру чинного, перебираючи та копіюючи його властивості.
134134
135135
Наприклад так:
136136
@@ -167,7 +167,7 @@ Object.assign(dest, ...sources)
167167
168168
Він копіює властивості всіх вихідних об’єктів у цільовий `dest`, а потім повертає його як результат.
169169
170-
Наприклад, у нас є об’єкт `user`, давайте додамо до нього пару властивостей з дозволами:
170+
Наприклад, у нас є об’єкт `user`, додаймо до нього пару властивостей з дозволами:
171171
172172
```js run
173173
let user = { name: "Микола" };
@@ -196,7 +196,7 @@ Object.assign(user, { name: "Петро" });
196196
alert(user.name); // now user = { name: "Петро" }
197197
```
198198
199-
Ми також можемо використовувати `Object.assign` щоб виконати просте клонування об’єкта:
199+
Ми також можемо використовувати `Object.assign`, щоб виконати просте клонування об’єкта:
200200
201201
```js run
202202
let user = {
@@ -311,7 +311,7 @@ structuredClone({
311311
312312
Властивості з функціями не підтримуються.
313313
314-
Для обробки таких складних випадків нам може знадобитися використовувати комбінацію методів клонування, написати спеціальний код або, щоб не винаходити колесо, взяти існуючу реалізацію, наприклад [_.cloneDeep(obj)](https://lodash.com /docs#cloneDeep) із бібліотеки JavaScript [lodash](https://lodash.com).
314+
Для обробки таких складних випадків нам може знадобитися використовувати комбінацію методів клонування, написати спеціальний код або, щоб не винаходити колесо, взяти чинну реалізацію, наприклад [_.cloneDeep(obj)](https://lodash.com /docs#cloneDeep) із бібліотеки JavaScript [lodash](https://lodash.com).
315315
316316
## Підсумки
317317

1-js/04-object-basics/03-garbage-collection/article.md

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

1111
Простіше кажучи, "досяжні" значення -- це ті, які якимось чином доступні або придатні для використання. Вони гарантовано зберігаються в пам’яті.
1212

13-
1. Існує базовий набір досяжних за своєю суттю значень, які неможливо видалити із зрозумілих причин.
13+
1. Існує базовий набір досяжних за своєю суттю значень, які неможливо видалити зі зрозумілих причин.
1414

1515
Наприклад:
1616

@@ -50,7 +50,7 @@ user = null;
5050

5151
![](memory-user-john-lost.svg)
5252

53-
Тепер Іван стає недосяжним. Немає доступу до нього, немає посилань на нього. Процес збирання сміття видалить дані і звільнить пам’ять.
53+
Тепер Іван стає недосяжним. Немає доступу до нього, немає посилань на нього. Процес збирання сміття видалить дані та звільнить пам’ять.
5454

5555
## Два посилання
5656

@@ -78,7 +78,7 @@ user = null;
7878

7979
## Взаємозв’язані об’єкти
8080

81-
Тепер більш складний приклад. Сім’я:
81+
Тепер складніший приклад. Сім’я:
8282

8383
```js
8484
function marry(man, woman) {
@@ -163,7 +163,7 @@ family = null;
163163

164164
![](garbage-collection-1.svg)
165165

166-
З правого боку ми чітко бачимо "недосяжний острів". Тепер давайте подивимося, як збирання сміття "позначає і видаляє".
166+
Праворуч ми чітко бачимо "недосяжний острів". Тепер подивімося, як збирання сміття "позначає і видаляє".
167167

168168
Перший крок позначає корені:
169169

@@ -177,7 +177,7 @@ family = null;
177177

178178
![](garbage-collection-4.svg)
179179

180-
Тепер об’єкти, які не вдалося відвідати в процесі, вважаються недосяжними і будуть видалені:
180+
Тепер об’єкти, які не вдалося відвідати в процесі, вважаються недосяжними та будуть видалені:
181181

182182
![](garbage-collection-5.svg)
183183

@@ -189,9 +189,9 @@ family = null;
189189

190190
- **Збірка поколінь (Generational collection)** -- об’єкти поділяються на два набори: "нові" та "старі". Багато об'єктів мають короткий термін служби, вони з’являються, виконують свою роботу і швидко стають непотрібними. Тому має сенс відстежувати нові об’єкти та очищати від них пам’ять, якщо це так. Ті, що використовуються досить довго, стають "старими" і оглядаються рідше.
191191
- **Інкрементний збір (Incremental collection)** -- якщо об’єктів багато, і ми намагаємось пройтися і позначити весь набір об’єктів одночасно, це може зайняти деякий час і ввести видимі затримки у виконанні. Тому рушій намагається розділити збирання сміття на частини. Потім частини виконуються по одній, окремо. Таким чином відбувається багато дрібних зборів сміття замість одного великого. Це вимагає додаткового обліку між ними для відстеження змін, але ми маємо багато маленьких затримок замість однієї великої.
192-
- **Збір під час простою (Idle-time collection)** -- завзвичай збирання сміття працює лише під час простою процесора, щоб зменшити можливий вплив на виконання.
192+
- **Збір під час простою (Idle-time collection)** -- зазвичай збирання сміття працює лише під час простою процесора, щоб зменшити можливий вплив на виконання.
193193

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

196196
## Підсумки
197197

@@ -207,6 +207,6 @@ family = null;
207207

208208
Якщо ви знайомі з низькорівневим програмуванням, більш детальна інформація про збирання сміття у рушії V8 міститься у статті [A tour of V8: Garbage Collection](http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection).
209209

210-
[V8 blog](https://v8.dev/) також час від часу публікує статті про зміни в управлінні пам’яттю. Зрозуміло, вам необхідно розуміти, як влаштований всередині рущія V8 в цілому. Про це ви можете прочитати у блозі [Вячеслава Єгорова](https://mrale.ph) який працював одним з інженерів V8. Я кажу: "V8", тому що він найкраще висвітлений статтями в Інтернеті. Для інших інтерпретаторів деякі підходи схожі, але збирання сміття відрізняється в багатьох аспектах.
210+
[V8 blog](https://v8.dev/) також час від часу публікує статті про зміни в управлінні пам’яттю. Зрозуміло, вам необхідно розуміти, як влаштований всередині рушія V8 в цілому. Про це ви можете прочитати у блозі [Вячеслава Єгорова](https://mrale.ph) який працював одним з інженерів V8. Я кажу: "V8", тому що він найкраще висвітлений статтями в Інтернеті. Для інших інтерпретаторів деякі підходи схожі, але збирання сміття відрізняється в багатьох аспектах.
211211

212212
Глибоке розуміння роботи інтерпретаторів необхідно, коли вам потрібні низькорівневі оптимізації. Було б розумно планувати їх вивчення тільки як наступний крок після вивчення мови JavaScript.

0 commit comments

Comments
 (0)