diff --git a/1-js/05-data-types/06-iterable/article.md b/1-js/05-data-types/06-iterable/article.md index 613817c986..ada5f4a6e9 100644 --- a/1-js/05-data-types/06-iterable/article.md +++ b/1-js/05-data-types/06-iterable/article.md @@ -139,7 +139,7 @@ for (let char of str) { 但是为了更深层的了解知识概念,我们来看看如何显式的创建迭代器。 -我们将会采用 `for..of` 一样的方法迭代字符串,但是是直接的调用。这段代码将会获取字符串的迭代器,然后“手动”调用它。 +我们将会采用与 `for..of` 一样的方法迭代字符串,但是是直接的调用。这段代码将会获取字符串的迭代器,然后“手动”调用它。 ```js run let str = "Hello"; @@ -165,7 +165,7 @@ while (true) { - **Iterables** 是应用于 `Symbol.iterator` 方法的对象,像上文所述。 - **Array-likes** 是有索引和 `length` 属性的对象,所以它们很像数组。 -很自然的,这些属性都可以结合起来。例如,数组既是可迭代对象(`for..of` 可以迭代字符串)也是类数组对象(它们有数字索引也有 `length` 属性)。 +很自然的,这些属性都可以结合起来。例如,字符串既是可迭代对象(`for..of` 可以迭代字符串)也是类数组对象(它们有数字索引也有 `length` 属性)。 但是一个可迭代对象也许不是类数组对象。反之亦然,一个类数组对象可能也不可迭代。 @@ -207,7 +207,7 @@ let arr = Array.from(arrayLike); // (*) alert(arr.pop()); // World(pop 方法生效) ``` -在行 `(*)`,`Array.from` 方法以一个对象为参数,监测到它是一个可迭代对象或类数组对象,然后将它转化为一个新的数组并将所有元素拷贝进去。 +在行 `(*)`,`Array.from` 方法以一个对象为参数,检测到它是一个可迭代对象或类数组对象,然后将它转化为一个新的数组并将所有元素拷贝进去。 如果是可迭代对象,也是同样: @@ -277,7 +277,7 @@ let str = '𝒳😂𩷶'; alert( slice(str, 1, 3) ); // 😂𩷶 // 原生方法不支持识别 UTF-16 扩展字符 -alert( str.slice(1, 3) ); // garbage(两个不同 UTF-16 扩展字符碎片拼接的结果) +alert( str.slice(1, 3) ); // 乱码(两个不同 UTF-16 扩展字符碎片拼接的结果) ``` @@ -286,7 +286,7 @@ alert( str.slice(1, 3) ); // garbage(两个不同 UTF-16 扩展字符碎片 可以应用 `for..of` 的对象被称为**可迭代的**。 - 技术上来说,可迭代对象必须实现方法 `Symbol.iterator`。 - - `obj[Symbol.iterator]` 结果被称为**迭代器**。由它处理更深入的迭代过程。 + - `obj[Symbol.iterator]` 的结果被称为**迭代器**。由它处理更深入的迭代过程。 - 一个迭代器必须有 `next()` 方法,它返回一个 `{done: Boolean, value: any}`,这里 `done:true` 表明迭代结束,否则 `value` 就是下一个值。 - `Symbol.iterator` 方法会被 `for..of` 自动调用,但我们也可以直接调用。 - 内置的可迭代对象例如字符串和数组,都实现了 `Symbol.iterator`。 @@ -297,4 +297,4 @@ alert( str.slice(1, 3) ); // garbage(两个不同 UTF-16 扩展字符碎片 如果我们深入了解规范 —— 我们将会发现大部分内建方法都假设它们需要处理可迭代对象或者类数组对象,而不是真正的数组,因为这样抽象度更高。 -`Array.from(obj[, mapFn, thisArg])` 将可迭代对象或类数组对象 `obj` 转化为真正的 `Array` 数组,然后我们就可以对它应用数组的方法。可选参数 `mapFn` 和 `thisArg` 允许我们对每个元素施加以一个函数。 +`Array.from(obj[, mapFn, thisArg])` 将可迭代对象或类数组对象 `obj` 转化为真正的 `Array` 数组,然后我们就可以对它应用数组的方法。可选参数 `mapFn` 和 `thisArg` 允许我们对每个元素都应用一个函数。