Skip to content

Commit 5777c31

Browse files
authored
Merge branch 'javascript-tutorial:master' into master
2 parents bda1c77 + ee23133 commit 5777c31

23 files changed

Lines changed: 849 additions & 844 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ for (let key in user) alert(key); // name, age (дані ключі не є си
161161
alert( "Прямий доступ: " + user[id] );
162162
```
163163

164-
[Object.keys(user)](mdn:js/Object/keys) також ігнорує їх. Це частина загального принципу "приховування символьних властивостей". Якщо інший скрипт або бібліотека спробує перебрати наш об’єкт за допомогою цикла, він несподівано не отримає доступ до символьних властивостей.
164+
[Object.keys(user)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys) також ігнорує їх. Це частина загального принципу "приховування символьних властивостей". Якщо інший скрипт або бібліотека спробує перебрати наш об’єкт за допомогою цикла, він несподівано не отримає доступ до символьних властивостей.
165165

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

‎1-js/05-data-types/12-json/article.md‎

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ alert(user); // {name: "Іван", age: 30}
2727

2828
## JSON.stringify
2929

30-
[JSON](http://uk.wikipedia.org/wiki/json) (JavaScript Object Notation) -- це загальний формат, який представляє значення та об’єкти. Він описується у [RFC 4627](http://tools.ietf.org/html/rfc4627) стандарті. Спочатку він був зроблений для JavaScript, але багато інших мов мають бібліотеки, щоб обробляють його також. Тому легко використовувати JSON для обміну даними, коли клієнт використовує JavaScript, а сервер написаний на Ruby/PHP/Java/що завгодно.
30+
[JSON](https://uk.wikipedia.org/wiki/JSON) (JavaScript Object Notation) -- це загальний формат, який представляє значення та об’єкти. Він описується у [стандарті RFC 4627](https://datatracker.ietf.org/doc/html/rfc4627). Спочатку він був розроблений для JavaScript, але багато інших мов мають бібліотеки, щоб обробляють його також. Тому легко використовувати JSON для обміну даними, коли клієнт використовує JavaScript, а сервер написаний на Ruby/PHP/Java тощо.
3131

3232
JavaScript надає методи:
3333

34-
- `JSON.stringify` для перетворити об’єктів в JSON.
35-
- `JSON.parse` для перетворення JSON назад в об’єкт.
34+
- `JSON.stringify` для перетворення об’єктів в JSON (у вигляді тексту).
35+
- `JSON.parse` для перетворення JSON-тексту назад в об’єкт.
3636

3737
Наприклад, тут ми викликаємо `JSON.stringify` з об’єктом `student`:
3838
```js run
@@ -164,11 +164,11 @@ meetup.place = room; // meetup посилається на room
164164
room.occupiedBy = meetup; // room посилається на meetup
165165

166166
*!*
167-
JSON.stringify(meetup); // Error: Converting circular structure to JSON
167+
JSON.stringify(meetup); // Помилка: Конвертування циклічних структур в JSON
168168
*/!*
169169
```
170170

171-
Тут перетворення не вдається із-за циклічного посилання: `room.occupiedBy` посилається на `meetup`, і `metup.place` посилається на `room`:
171+
Тут перетворення не вдається через циклічні посилання: `room.occupiedBy`, яке посилається на `meetup`, і `metup.place`, яке посилається на `room`:
172172

173173
![](json-meetup.svg)
174174

@@ -202,18 +202,18 @@ let room = {
202202
};
203203

204204
let meetup = {
205-
title: "Conference",
206-
participants: [{name: "John"}, {name: "Alice"}],
205+
title: "Конференція",
206+
participants: [{name: "Іван"}, {name: "Аліна"}],
207207
place: room // meetup посилається на room
208208
};
209209

210210
room.occupiedBy = meetup; // room посилається на meetup
211211

212212
alert( JSON.stringify(meetup, *!*['title', 'participants']*/!*) );
213-
// {"title":"Conference","participants":[{},{}]}
213+
// {"title":"Конференція","participants":[{},{}]}
214214
```
215215

216-
Тут ми, мабуть, занадто суворі. Список властивостей застосовується до всієї структури об’єкта. Отже, об’єкти в `participants` є порожніми, тому що `name` не в списку.
216+
Тут ми, мабуть, занадто суворі. Список властивостей застосовується до всієї структури об’єкта. Отже, об’єкти в `participants` будуть порожніми, тому що `name` не в списку.
217217

218218
Включімо в список кожної власності, крім `room.occupiedBy`, що призведе до циклічного посилання:
219219

@@ -224,7 +224,7 @@ let room = {
224224

225225
let meetup = {
226226
title: "Конференція",
227-
participants: [{name: "Іван"}, {name: "Аліса"}],
227+
participants: [{name: "Іван"}, {name: "Аліна"}],
228228
place: room // meetup посилається на room
229229
};
230230

@@ -234,7 +234,7 @@ alert( JSON.stringify(meetup, *!*['title', 'participants', 'place', 'name', 'num
234234
/*
235235
{
236236
"title":"Конференція",
237-
"participants":[{"name":"Іван"},{"name":"Аліса"}],
237+
"participants":[{"name":"Іван"},{"name":"Аліна"}],
238238
"place":{"number":23}
239239
}
240240
*/
@@ -255,7 +255,7 @@ let room = {
255255

256256
let meetup = {
257257
title: "Конференція",
258-
participants: [{name: "Іван"}, {name: "Аліса"}],
258+
participants: [{name: "Іван"}, {name: "Аліна"}],
259259
place: room // meetup посилається на room
260260
};
261261

@@ -273,7 +273,7 @@ participants: [object Object],[object Object]
273273
0: [object Object]
274274
name: Іван
275275
1: [object Object]
276-
name: Аліса
276+
name: Аліна
277277
place: [object Object]
278278
number: 23
279279
occupiedBy: [object Object]
@@ -335,7 +335,7 @@ alert(JSON.stringify(user, null, 2));
335335

336336
## Спеціальний "toJSON"
337337

338-
Подібно до `tostring` для перетворення в рядки, об’єкт може надати метод `toJSON` для перетворення в JSON. `Json.stringify` автоматично викликає його, він доступний.
338+
Подібно до методу `toString` (для перетворення об’єкта в рядок), об’єкт також має метод `toJSON` для його перетворення в JSON. Функція `Json.stringify` автоматично викликає цей метод.
339339

340340
Наприклад:
341341

@@ -362,7 +362,7 @@ alert( JSON.stringify(meetup) );
362362
*/
363363
```
364364

365-
Тут ми бачимо, що `date` `(1)` став рядком. Це тому, що всі дати мають вбудований метод `toJSON`, який повертає такий вид рядка.
365+
Тут ми бачимо, що `date` `(1)` став рядком. Це тому, що всі дати мають вбудований метод `toJSON`, який повертає такий рядок в такому вигляді.
366366

367367
Тепер додаймо спеціальний `toJSON` для нашого об’єкта `room` `(2)`:
368368

@@ -396,7 +396,7 @@ alert( JSON.stringify(meetup) );
396396
*/
397397
```
398398

399-
Як ми бачимо, `toJSON` використовується як для прямого виклику `JSON.stringify(room)`, а також коли властивість `room` вкладена в іншому закодованому об’єкті.
399+
Як бачимо, `toJSON` використовується як для прямого виклику `JSON.stringify(room)`, а також коли властивість `room` вкладена в іншому закодованому об’єкті.
400400

401401

402402
## JSON.parse

‎1-js/08-prototypes/01-prototype-inheritance/article.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ alert( rabbit.eats ); // true (**)
5454
alert( rabbit.jumps ); // true
5555
```
5656

57-
В позначеному рядку `(*)`, об’єкт `animal` визначається як прототип для об’єкта `rabbit`.
57+
В позначеному `(*)` рядку, об’єкт `animal` визначається як прототип для об’єкта `rabbit`.
5858

5959
І коли `alert` намагається прочитати властивість `rabbit.eats` (рядок позначено `(**)`), а її там немає, то JavaScript йде за посиланням `[[Prototype]]` та знаходить її в об’єкті `animal` (дивіться знизу вверх):
6060

@@ -287,7 +287,7 @@ for(let prop in rabbit) alert(prop); // jumps, потім eats
287287
*/!*
288288
```
289289

290-
Якщо це не те, що нам потрібно, і ми б хотіли виключити отримання успадкованих значень, існує вбудований метод [obj.hasOwnProperty(key)](mdn:js/Object/hasOwnProperty), який повертає `true` якщо `obj` має тільки власні (не успадковані) властивості.
290+
Якщо це не те, що нам потрібно, і ми б хотіли виключити отримання успадкованих значень, існує вбудований метод [obj.hasOwnProperty(key)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty), який повертає `true` якщо `obj` має тільки власні (не успадковані) властивості.
291291

292292
Отже, ми можемо відфільтрувати успадковані властивості (чи щось зробити з ними інше):
293293

‎1-js/09-classes/01-class/article.md‎

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ alert(Object.getOwnPropertyNames(User.prototype)); // constructor, sayHi
118118

119119
## Не просто синтаксичний цукор
120120

121-
Іноді люди кажуть, що `class` -- це "синтаксичний цукор" (синтаксис, який призначений для того, щоб зробити речі легше для читання, але не вводить нічого нового), тому що ми могли б фактично оголосити те ж саме взагалі без ключового слова `class`:
121+
Іноді люди кажуть, що `class` -- це "синтаксичний цукор" (синтаксис, який призначений для того, щоб зробити речі легше для читання, але не вводить нічого нового), тому що фактично ми могли б оголосити те саме без використання ключового слова `class`:
122122

123123
```js run
124124
// переписування класу User в чистих функціях
@@ -144,17 +144,17 @@ user.sayHi();
144144

145145
Проте, існують важливі відмінності.
146146

147-
1. По-перше, функція, що створена за допомогою `class`, позначена спеціальною внутрішньою власністю `[[IsClassConstructor]]: true`. Так що це не зовсім те ж саме, що і створити її вручну.
147+
1. По-перше, функція, що створена за допомогою `class`, позначена спеціальною внутрішньою властивістю `[[IsClassConstructor]]: true`. Так що це не зовсім те саме, що створити її вручну.
148148

149-
Мовна перевіряє цю властивість у різних місцях. Наприклад, на відміну від звичайної функції, її треба викликати з `new`:
149+
Рушій перевіряє цю властивість у різних місцях. Наприклад, на відміну від звичайної функції, її треба викликати з `new`:
150150

151151
```js run
152152
class User {
153153
constructor() {}
154154
}
155155

156156
alert(typeof User); // function
157-
User(); // Error: Class constructor User cannot be invoked without 'new'
157+
User(); // Помилка: Конструктор класу User неможливо викликати без 'new'
158158
```
159159

160160
Також, представлення конструктора класу у вигляді рядка у більшості рушіїв JavaScript починається з "class..."
@@ -166,21 +166,21 @@ user.sayHi();
166166
167167
alert(User); // class User { ... }
168168
```
169-
Є також інші відмінності, ми побачимо їх найближчим часом.
169+
Є й інші відмінності, ми побачимо їх найближчим часом.
170170

171171
2. Методи класу неперелічувані.
172-
Оголошення класу встановлює `enumerable` прапор у `false` для всіх методів в `"prototype"`.
172+
Оголошення класу встановлює прапор `enumerable` у `false` для всіх методів в `"prototype"`.
173173

174-
Це добре тому, що коли ми проходимо через об’єкт за допомогою `for..in`, ми зазвичай не хочемо мати справу з методами класу.
174+
Це добре тому, що коли ми перебираємо об’єкт за допомогою `for..in`, ми зазвичай не хочемо мати справу з методами класу.
175175

176176
3. Клас завжди `use strict`.
177-
Весь код всередині конструкції класу автоматично знаходиться в строгому режимі.
177+
Весь код всередині конструкції класу автоматично знаходиться в суворому режимі.
178178

179179
Крім того, синтаксис `class` приносить багато інших особливостей, які ми дослідимо пізніше.
180180

181181
## Class Expression
182182

183-
Так само, як функції, класи можуть бути визначені всередині іншого виразу, передані, повернуті, присвоєні та ін.
183+
Так само, як функції, класи можуть бути визначені всередині іншого виразу, передані, повернуті, присвоєні тощо.
184184

185185
Ось приклад class expression:
186186

@@ -192,9 +192,9 @@ let User = class {
192192
};
193193
```
194194

195-
Подібно до Named Function Expression, class expression може мати назву.
195+
Подібно до Named Function Expression, Class Expression може мати назву.
196196

197-
Якщо class expression має назву, то її видно лише у класі:
197+
Якщо Class Expression має назву, то її видно лише у класі:
198198

199199
```js run
200200
// "Named Class Expression"

0 commit comments

Comments
 (0)