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/05-data-types/01-primitives-methods/1-string-new-property/solution.md
+7-11Lines changed: 7 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,22 +9,18 @@ str.test = 5; // (*)
9
9
alert(str.test);
10
10
```
11
11
12
-
Здесь может быть два результата:
13
-
1.`undefined`
14
-
2. Ошибка
12
+
В зависимости от того, используете ли вы cтрогий режим (`use strict`) или нет, результат может быть:
13
+
1.`undefined` (без strict)
14
+
2. Ошибка (strict mode)
15
15
16
16
Почему? Давайте посмотрим что происходит в строке кода, отмеченной `(*)`:
17
17
18
18
1. В момент обращения к свойству `str` создается "объект-обертка".
19
-
2.Операция со свойством выполняется на объекте. Таким образом, объект получает свойство `test`.
20
-
3.Операция заканчивается и "объект-обертка" удаляется.
19
+
2.В cтрогом режиме, попытка изменения этого объекта выдает ошибку.
20
+
3.В стандартном режиме, операция продолжается, объект получает свойство `test`, но после этого "объект-обертка" удаляется.
21
21
22
-
Выходит, на последней линии `str` больше не имеет свойства `test`. При каждой объектной операции со строкой создается новый "объект-обертка".
23
-
24
-
Некоторые браузеры могут решить еще более ограничить возможности пользователя и запретить присваивание свойств примитивным типам. Поэтому, на практике мы можем встречать ошибки на линии `(*)`. Хотя, это далековато от правил языка.
22
+
Выходит, в стандартном режиме на последней линии `str` больше не имеет свойства `test`.
25
23
26
24
**Данный пример наглядно показывает, что примитивы не являются объектами.**
27
25
28
-
Они просто не могут хранить данные.
29
-
30
-
Все операции со свойствами/методами выполняются с помощью временных объектов.
Copy file name to clipboardExpand all lines: 1-js/05-data-types/01-primitives-methods/article.md
+10-10Lines changed: 10 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
JavaScript позволяет нам работать с примитивными типами данных (далее: примитивы) - строки, числа, и т.д., так, как если бы они были объектами.
4
4
5
-
Также примитивы имеют методы объектов. Их мы изучим позже, но сначала мы разберем, как это все работает, потому что, конечно, примитивы - не объекты (и здесь мы разберем это поподробнее).
5
+
Они даже предоставляют методы. Мы изучим их позже, а сначала разберем, как это все работает, потому что, конечно, примитивы - не объекты.
6
6
7
7
Давайте взглянем на ключевые различия между примитивами и объектами.
8
8
@@ -14,9 +14,9 @@ JavaScript позволяет нам работать с примитивным
14
14
Объект
15
15
16
16
- Может хранить множество значений как свойства.
17
-
- Объявляется при помощи фигурных скобок `{}`, например: `{name: "Рома", age: 30}`. В JavaScript есть и другие виды объектов; например, функции тоже являются объектами.
17
+
- Объявляется при помощи фигурных скобок `{}`, например: `{name: "Рома", age: 30}`. В JavaScript есть и другие виды объектов: например, функции тоже являются объектами.
18
18
19
-
Одна из лучших особенностей объектов это то, что мы можем хранить метод как одно из свойств объекта.
19
+
Одна из лучших особенностей объектов это то, что мы можем хранить функцию как одно из свойств объекта.
Вот парадокс, с которым столкнулся создатель JavaScript:
43
43
44
-
- Есть много всего, что хотелось бы сделать с примитивами, такими как строка или число. Было бы замечательно, если бы мы могли обращаться с ними так же, как и с методами.
44
+
- Есть много всего, что хотелось бы сделать с примитивами, такими как строка или число. Было бы замечательно, если бы мы могли работать с ними через вызовы методов.
45
45
- Примитивы должны быть как можно легкими и быстрыми.
46
46
47
47
Вот решение, хотя выглядит оно немного неуклюже:
48
48
49
49
1. Примитивы остаются примитивами. Одно значение, как и хотелось.
50
50
2. Язык позволяет иметь доступ к методам и свойствам строк, чисел, булевых значений и символов.
51
-
3.При этом, создается специальный "объект-обертка", который предоставляет дополнительную функциональность, а после, удаляется.
51
+
3.Чтобы это работало, создается специальный "объект-обертка", который предоставляет дополнительную функциональность, а после удаляется.
52
52
53
-
Каждый примитив имеет свой собственный "объект-обертку", которые называются: `String`, `Number`, `Boolean` и `Symbol`. Таким образом,они имеют разный набор методов.
53
+
Каждый примитив имеет свой собственный "объект-обертку", которые называются: `String`, `Number`, `Boolean` и `Symbol`. Таким образом,они имеют разный набор методов.
54
54
55
55
К примеру, существует метод [str.toUpperCase()](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase), который возвращает cтроку в верхнем регистре.
56
56
@@ -62,7 +62,7 @@ let str = "Привет";
62
62
alert( str.toUpperCase() ); // ПРИВЕТ
63
63
```
64
64
65
-
Легко, правда? Вот, что на самом деле происходит в `str.toUpperCase()`:
65
+
Очень просто, не правда ли? Вот, что на самом деле происходит в `str.toUpperCase()`:
66
66
67
67
1. Строка `str` - примитив. В момент обращения к его свойству, создается специальный объект, который знает значение строки и имеет такие полезные методы, как `toUpperCase()`.
68
68
2. Этот метод запускается и возвращает новую строку (показывается в `alert`).
0 commit comments