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/01-object/article.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,17 +1,17 @@
1
1
2
2
# Объекты
3
3
4
-
Как мы знаем из главы <info:types>, в JavaScript существует семь типов данных. Шесть из них называются "примитивными", так как описываются одним значением (будь то строка, число или другое значение).
4
+
Как мы знаем из главы <info:types>, в JavaScript существует семь типов данных. Шесть из них называются "примитивными", так как содержат только одно значение (будь то строка, число или другое значение).
5
5
6
6
Напротив, объекты используются для хранения коллекций различных данных и более сложных сущностей. В JavaScript объекты проникли практически в каждый аспект языка. Поэтому мы должны понять их прежде, чем углубляться куда-либо ещё.
7
7
8
8
Объект может быть создан с помощью фигурных скобок `{…}` с необязательным списком *свойств*. Свойство - это пара "ключ: значение", где `ключ` - это строка (также называемая "именем свойства"), а `значение` может быть чем угодно.
9
9
10
-
Мы можем представить объект в виде ящика с подписанными папками. Каждый фрагмент данных хранится в своей папке, на которой написан ключ. По имени ключа папку легко найти, удалить или добавить в неё что либо.
10
+
Мы можем представить объект в виде ящика с подписанными папками. Каждый элемент данных хранится в своей папке, на которой написан ключ. По имени ключа папку легко найти, удалить или добавить в неё что либо.
11
11
12
12

13
13
14
-
Пустой объект ("пустой ящик") можно создать используя один из двух вариантов синтаксиса:
14
+
Пустой объект ("пустой ящик") можно создать, используя один из двух вариантов синтаксиса:
15
15
16
16
```js
17
17
let user =newObject(); // синтаксис "конструктор объекта"
@@ -237,7 +237,7 @@ alert(obj.__proto__); // [object Object], работает не так, как
237
237
238
238
## Короткое свойство
239
239
240
-
В реальном коде, часто нам необходимо использовать существующие переменные как значения для свойств с тем же именем.
240
+
В реальном коде часто нам необходимо использовать существующие переменные как значения для свойств с тем же именем.
241
241
242
242
Например:
243
243
@@ -281,7 +281,7 @@ let user = {
281
281
282
282
## Проверка существования свойства
283
283
284
-
Особенность объектов в том, что можно получить доступ к любому свойству. Даже если свойство не существует ошибки не будет!
284
+
Особенность объектов в том, что можно получить доступ к любому свойству. Даже если свойства не существует - ошибки не будет!
285
285
При обращении к свойству, которого нет, возвращается `undefined`. Это позволяет нам довольно просто проверить существование свойства - сравнить его с `undefined`:
286
286
287
287
```js run
@@ -555,7 +555,7 @@ alert( a == b ); // false
555
555
556
556
### Объекты-константы
557
557
558
-
Объект, объявленный через `const` *может* быть изменен.
558
+
Объект, объявленный через `const`, *может* быть изменен.
559
559
560
560
Пример:
561
561
@@ -588,7 +588,7 @@ user = {
588
588
};
589
589
```
590
590
591
-
...Но что делать, если мы хотим сделать константами свойства объекта? Как сделать так, чтобы операция`user.age = 25` выдавала ошибку. Это тоже возможно. Мы рассмотрим эту тему в главе <info:property-descriptors>.
591
+
...Но что делать, если мы хотим сделать константами свойства объекта? Как сделать так, чтобы попытка изменить`user.age = 25` выдавала ошибку. Это тоже возможно. Мы рассмотрим эту тему в главе <info:property-descriptors>.
592
592
593
593
## Клонирование и объединение объектов, Object.assign
594
594
@@ -674,7 +674,7 @@ let clone = Object.assign({}, user);
674
674
*/!*
675
675
```
676
676
677
-
Все свойства объекта `user` будут скопированы в пустой объект и ссылка на этот объект присвоится переменной `clone`. На самом деле, такое клонирование работает также, как и через цикл, но короче.
677
+
Все свойства объекта `user` будут скопированы в пустой объект и ссылка на этот объект будет в переменной `clone`. На самом деле, такое клонирование работает также, как и через цикл, но короче.
678
678
679
679
До сих пор мы предполагали, что все свойства пользователя примитивны. Но свойства могут быть ссылками на другие объекты. Что с ними делать?
680
680
@@ -715,7 +715,7 @@ alert(clone.sizes.width); // 51, видим результат в другом
715
715
Чтобы исправить это, мы должны в цикле клонирования делать проверку, не является ли значение `user[key]` объектом, и если это так - копируем и его структуру. Это называется "глубокое клонирование".
716
716
717
717
Существует стандартный алгоритм глубокого клонирования, [Structured cloning algorithm](http://w3c.github.io/html/infrastructure.html#safe-passing-of-structured-data). Он решает описанную выше задачу, а также более сложные задачи.
718
-
Чтобы не изобретать велосипед, мы можем использовать реализацию этого алгоритма из JavaScript-библиотеки [lodash](https://lodash.com), метод [\_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
718
+
Чтобы не изобретать велосипед, мы можем использовать реализацию этого алгоритма из JavaScript-библиотеки [lodash](https://lodash.com), метод [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
719
719
720
720
721
721
## Итого
@@ -736,9 +736,9 @@ alert(clone.sizes.width); // 51, видим результат в другом
736
736
- Проверка существования свойства:`"key" in obj`.
737
737
- Перебор свойств объекта: цикл for`for (let key in obj)`.
738
738
739
-
Объекты присваиваются и копируются по ссылке. Другими словами, переменная хранит не "значение объекта", а "ссылку" (адрес в памяти) на это значение. Поэтому копирование такой переменной или передача ее в качестве аргумента функции, приводит к копированию этой ссылки, а не самого объекта. Все операции с использованием скопированных ссылок (например, добавление или удаление свойств) выполняются с одним и тем же объектом.
739
+
Объекты присваиваются и копируются по ссылке. Другими словами, переменная хранит не "значение объекта", а "ссылку" (адрес в памяти) на это значение. Поэтому копирование такой переменной или передача ее в качестве аргумента функции приводит к копированию этой ссылки, а не самого объекта. Все операции с использованием скопированных ссылок (например, добавление или удаление свойств) выполняются с одним и тем же объектом.
740
740
741
-
Чтобы сделать "настоящую копию" (клон), мы можем использовать `Object.assign` или [\_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
741
+
Чтобы сделать "настоящую копию" (клон), мы можем использовать `Object.assign` или [_.cloneDeep(obj)](https://lodash.com/docs#cloneDeep).
742
742
743
743
То, что мы изучали в этой главе, называется "простым объектом" ("plain object") или просто `Object`.
0 commit comments