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/1-getting-started/1-intro/article.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -64,7 +64,7 @@ JavaScript -- быстрый и мощный язык, но браузер на
64
64
65
65
**Большинство возможностей JavaScript в браузере ограничено текущим окном и страницей.**
66
66
67
-
<imgsrc="limitations.svg"width="530"height="400">
67
+
<imgsrc="limitations.png"width="530"height="400">
68
68
69
69
<ul>
70
70
<li>JavaScript не может читать/записывать произвольные файлы на жесткий диск, копировать их или вызывать программы. Он не имеет прямого доступа к операционной системе.
Copy file name to clipboardExpand all lines: 1-js/3-writing-js/2-coding-style/article.md
+2-2
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@
7
7
8
8
Шпаргалка с правилами синтаксиса (детально их варианты разобраны далее):
9
9
10
-
<imgsrc="code-style.svg">
10
+
<imgsrc="code-style.png">
11
11
12
12
<!--
13
13
```js
@@ -57,7 +57,7 @@ if (n < 0) {
57
57
```
58
58
-->
59
59
60
-
<imgsrc="figure-bracket-style.svg">
60
+
<imgsrc="figure-bracket-style.png">
61
61
62
62
Если у вас уже есть опыт в разработке, и вы привыкли делать скобку на отдельной строке -- это тоже вариант. В конце концов, решать вам. Но в большинстве JavaScript-фреймворков стиль именно такой.
Copy file name to clipboardExpand all lines: 1-js/4-data-structures/4-object/article.md
+4-4
Original file line number
Diff line number
Diff line change
@@ -13,7 +13,7 @@
13
13
14
14
Её можно легко представить как шкаф с подписанными ящиками. Все данные хранятся в ящичках. По имени можно легко найти ящик и взять то значение, которое в нём лежит.
15
15
16
-
<imgsrc="object.svg">
16
+
<imgsrc="object.png">
17
17
18
18
В отличие от реальных шкафов, в ассоциативный массив можно в любой момент добавить новые именованные "ящики" или удалить существующие. Далее мы увидим примеры, как это делается.
19
19
@@ -40,7 +40,7 @@
40
40
var person = {}; // пока пустой
41
41
```
42
42
43
-
<imgsrc="object-person-empty.svg">
43
+
<imgsrc="object-person-empty.png">
44
44
45
45
46
46
Основные операции с объектами -- это создание, получение и удаление свойств.
@@ -55,7 +55,7 @@ person.name = 'Вася';
55
55
person.age=25; // запишем ещё одно свойство: с именем 'age' и значением 25
56
56
```
57
57
58
-
<imgsrc="object-person-1.svg">
58
+
<imgsrc="object-person-1.png">
59
59
60
60
Значения хранятся "внутри" ящиков. Обратим внимание -- любые значения, любых типов: число, строка -- не важно.
Copy file name to clipboardExpand all lines: 1-js/4-data-structures/7-array/article.md
+5-5
Original file line number
Diff line number
Diff line change
@@ -84,13 +84,13 @@ alert( arr[2].name ); // Петя
84
84
85
85
Одно из применений массива -- это [очередь](http://ru.wikipedia.org/wiki/%D0%9E%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C_%28%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%29). В классическом программировании так называют упорядоченную коллекцию элементов, такую что элементы добавляются в конец, а обрабатываются -- с начала.
86
86
87
-
<imgsrc="queue.svg">
87
+
<imgsrc="queue.png">
88
88
89
89
В реальной жизни эта структура данных встречается очень часто. Например, очередь сообщений, которые надо показать на экране.
90
90
91
91
Очень близка к очереди еще одна структура данных: [стек](http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA). Это такая коллекция элементов, в которой новые элементы добавляются в конец и берутся с конца.
92
92
93
-
<imgsrc="stack.svg">
93
+
<imgsrc="stack.png">
94
94
95
95
Например, стеком является колода карт, в которую новые карты кладутся сверху, и берутся -- тоже сверху.
96
96
@@ -225,7 +225,7 @@ alert( a ); // 0,,,,,5
225
225
226
226
Методы `push/pop` выполняются быстро, а `shift/unshift` -- медленно.
227
227
228
-
<imgsrc="array-speed.svg">
228
+
<imgsrc="array-speed.png">
229
229
230
230
231
231
Чтобы понять, почему работать с концом массива -- быстрее, чем с его началом, разберём подробнее происходящее при операции:
@@ -243,7 +243,7 @@ fruits.shift(); // убрать 1 элемент с начала
243
243
<li>Обновить свойство `length`.</li>
244
244
</ol>
245
245
246
-
<imgsrc="array-shift.svg">
246
+
<imgsrc="array-shift.png">
247
247
248
248
**Чем больше элементов в массиве, тем дольше их перемещать, это много операций с памятью.**
249
249
@@ -257,7 +257,7 @@ fruits.shift(); // убрать 1 элемент с начала
257
257
fruits.pop(); // убрать 1 элемент с конца
258
258
```
259
259
260
-
<imgsrc="array-pop.svg">
260
+
<imgsrc="array-pop.png">
261
261
262
262
**Перемещать при `pop` не требуется, так как прочие элементы после этой операции остаются на тех же индексах.**
А если две, то получается, что от бывшего `family.father` ссылки выходят, но в него -- ни одна не идёт:
117
117
118
-
<imgsrc="family-no-father.svg">
118
+
<imgsrc="family-no-father.png">
119
119
120
120
**Совершенно неважно, что из объекта выходят какие-то ссылки, они не влияют на достижимость этого объекта.**
121
121
122
122
Бывший `family.father` стал недостижимым и будет удалён вместе со своми данными, которые также более недоступны из программы.
123
123
124
-
<imgsrc="family-no-father-2.svg">
124
+
<imgsrc="family-no-father-2.png">
125
125
126
126
А теперь -- рассмотрим более сложный случай. Что будет, если удалить главную ссылку `family`?
127
127
@@ -133,7 +133,7 @@ window.family = null;
133
133
134
134
Результат:
135
135
136
-
<imgsrc="family-no-family.svg">
136
+
<imgsrc="family-no-family.png">
137
137
138
138
Как видим, объекты в конструкции всё ещё связаны между собой. Однако, поиск от корня их не находит, они не достижимы, и значит сборщик мусора удалит их из памяти.
Copy file name to clipboardExpand all lines: 1-js/9-prototypes/1-prototype/article.md
+1-1
Original file line number
Diff line number
Diff line change
@@ -38,7 +38,7 @@ alert( rabbit.eats ); // true
38
38
39
39
Иллюстрация происходящего при чтении `rabbit.eats` (поиск идет снизу вверх):
40
40
41
-
<imgsrc="proto-animal-rabbit.svg">
41
+
<imgsrc="proto-animal-rabbit.png">
42
42
43
43
**Объект, на который указывает ссылка `__proto__`, называется *"прототипом"*. В данном случае получилось, что `animal` является прототипом для `rabbit`.**
Copy file name to clipboardExpand all lines: 1-js/9-prototypes/3-native-prototypes/article.md
+3-3
Original file line number
Diff line number
Diff line change
@@ -33,7 +33,7 @@ alert( {}.__proto__.toString ); // function toString
33
33
<li>В дальнейшем при обращении к `obj.toString()` -- функция будет взята из `Object.prototype`.</li>
34
34
</ol>
35
35
36
-
<imgsrc="native-prototypes-object.svg">
36
+
<imgsrc="native-prototypes-object.png">
37
37
38
38
Это можно легко проверить:
39
39
@@ -55,7 +55,7 @@ alert( obj.__proto__.__proto__ ); // null, нет
55
55
56
56
Точно такой же подход используется в массивах `Array`, функциях `Function` и других объектах. Встроенные методы для них находятся в `Array.prototype`, `Function.prototype` и т.п.
57
57
58
-
<imgsrc="native-prototypes-classes.svg">
58
+
<imgsrc="native-prototypes-classes.png">
59
59
60
60
Например, когда мы создаём массив, `[1, 2, 3]`, то это альтернативный вариант синтаксиса `new Array`, так что у массивов есть стандартный прототип `Array.prototype`.
Как мы видели раньше, у `Object.prototype` есть свой `toString`, но так как в `Array.prototype` он ищется первым, то берётся именно вариант для массивов:
83
83
84
-
<imgsrc="native-prototypes-array-tostring.svg">
84
+
<imgsrc="native-prototypes-array-tostring.png">
85
85
86
86
87
87
[smart header="Вызов методов через `apply` из прототипа"]
В `prototype` по умолчанию всегда находится свойство `constructor`, указывающее на функцию-конструктор. В частности, `Rabbit.prototype.constructor == Rabbit`. Если мы рассчитываем использовать это свойство, то при замене `prototype` через `Object.create` нужно его явно сохранить:
Например, в строке <codeclass="subject">Hello, Java!</code> под `\b` подходят следующие позиции:
105
105
106
-
<imgsrc="hello-java-boundaries.svg">
106
+
<imgsrc="hello-java-boundaries.png">
107
107
108
108
Как правило, `\b` используется, чтобы искать отдельно стоящее слово. Не на русском конечно, хотя подобную проверку, как мы увидим далее, можно легко сделать для любого языка. А вот на английском, как в примере выше или для чисел, которые являются частным случаем `\w` -- легко.
0 commit comments