Skip to content

Commit df92326

Browse files
committed
fixes
1 parent c8ece4e commit df92326

2 files changed

Lines changed: 14 additions & 16 deletions

File tree

1-js/05-data-types/05-array-methods/article.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ alert( arr.concat(arrayLike) ); // 1,2,[object Object]
181181
//[1, 2, arrayLike]
182182
```
183183

184-
...Но если массивоподобный объект имеет специальное свойство `Symbol.isConcatSpreadable`, то он обрабатывается `concat` как массив: вместо него добавляются его элементы:
184+
...Но если объект имеет специальное свойство `Symbol.isConcatSpreadable`, то он обрабатывается `concat` как массив: вместо него добавляются его элементы:
185185

186186
```js run
187187
let arr = [1, 2];

1-js/05-data-types/06-iterable/article.md

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11

22
# Итерируемые объекты
33

4-
*Итерируемые* (или *перебираемые*) объекты - это применение принципов работы массивов к другим объектам. Эта концепция позволяет использовать любой объект в цикле `for..of`.
4+
*Итерируемые* (или *перебираемые*) объекты - это концепция, которая позволяет использовать любой объект в цикле `for..of`.
55

6-
Конечно же, сами массивы являются итерируемыми объектами. Но есть и много других встроенных итерируемых объектов. Например, строки тоже можно перебирать. Как мы увидим далее, работа многих встроенных операторов и методов основана на них.
6+
Конечно же, сами массивы являются перебираемыми объектами. Но есть и много других встроенных перебираемыми объектов, например, строки.
77

8-
Если объект представляет собой коллекцию, то можно использовать `for..of` для её перебора, даже если это не массив. Давайте посмотрим, как это сделать.
8+
Если объект не является массивом, но представляет собой коллекцию каких-то элементов, то удобно использовать цикл `for..of` для их перебора, так что давайте посмотрим, как этого достичь.
99

1010
## Symbol.iterator
1111

@@ -25,14 +25,14 @@ let range = {
2525
// for(let num of range) ... num=1,2,3,4,5
2626
```
2727

28-
Чтобы сделать `range` итерируемым (и позволить ему работать в `for..of`), нам нужно добавить в объект метод с именем `Symbol.iterator` (специальный встроенный `Symbol`, созданный как раз для этого).
28+
Чтобы сделать `range` итерируемым (и позволить с ним работать `for..of`), нам нужно добавить в объект метод с именем `Symbol.iterator` (специальный встроенный `Symbol`, созданный как раз для этого).
2929

3030
1. Когда цикл `for..of` запускается, он вызывает этот метод один раз (или выдаёт ошибку, если метод не найден). Этот метод должен вернуть *итератор* -- объект с методом `next`.
3131
2. Дальше, `for..of` работает *только с этим возвращённым объектом*.
3232
3. Когда `for..of` хочет получить следующее значение, он вызывает метод `next()` этого объекта.
33-
4. Результат вызова `next()` должен иметь вид `{done: Boolean, value: any}`, где `done=true` означает, что итерация закончена, в противном случае `value` должен содержать следующее значение.
33+
4. Результат вызова `next()` должен иметь вид `{done: Boolean, value: any}`, где `done=true` означает, что итерация закончена, в противном случае `value` содержит очередное значение.
3434

35-
Вот полная реализация `range`:
35+
Вот полная реализация `range` с пояснениями:
3636

3737
```js run
3838
let range = {
@@ -67,10 +67,10 @@ for (let num of range) {
6767
}
6868
```
6969

70-
Обратите внимание на ключевую особенность итераторов: разделение ответственности:
70+
Обратите внимание на ключевую особенность итераторов: разделение ответственности.
7171

7272
- У самого `range` нет метода `next()`.
73-
- Вместо этого другой объект, так называемый "итератор", создаётся вызовом `range[Symbol.iterator]()`, и именно он управляет всей итерацией.
73+
- Вместо этого другой объект, так называемый "итератор", создаётся вызовом `range[Symbol.iterator]()`, и именно его `next()` генерирует значения.
7474

7575
Таким образом, итератор отделен от самого итерируемого объекта.
7676

@@ -115,9 +115,9 @@ for (let num of range) {
115115
```
116116

117117

118-
## Строка - итерируемый объект
118+
## Строка - перебираемый объект
119119

120-
Среди встроенных итерируемых объектов наиболее широко используются массивы и строки.
120+
Среди встроенных перебираемых объектов наиболее широко используются массивы и строки.
121121

122122
Для строки `for..of` перебирает символы:
123123

@@ -128,7 +128,7 @@ for (let char of "test") {
128128
}
129129
```
130130

131-
Работает корректно даже с суррогатными парами!
131+
И он работает корректно даже с суррогатными парами!
132132

133133
```js run
134134
let str = '𝒳😂';
@@ -139,9 +139,7 @@ for (let char of str) {
139139

140140
## Явный вызов итератора
141141

142-
Обычно внутреннее устройство итерируемых объектов спрятано от внешнего кода. Есть цикл `for..of`, он работает, и это все, что нужно извне.
143-
144-
Но чтобы понять устройство итераторов чуть глубже, давайте посмотрим как создать итератор явно.
142+
Чтобы понять устройство итераторов чуть глубже, давайте посмотрим как их использовать явно.
145143

146144
Мы будем перебирать строку в точности так же, как цикл `for..of`, но вручную, прямыми вызовами. Код ниже получает строковой итератор и получает из него значения:
147145

@@ -282,7 +280,7 @@ let str = '𝒳😂𩷶';
282280

283281
alert( slice(str, 1, 3) ); // 😂𩷶
284282

285-
// встроенный метод не поддерживает суррогатные пары
283+
// а вот встроенный метод не поддерживает суррогатные пары
286284
alert( str.slice(1, 3) ); // мусор (две части различных суррогатных пар)
287285
```
288286

0 commit comments

Comments
 (0)