File tree Expand file tree Collapse file tree 1 file changed +10
-6
lines changed Expand file tree Collapse file tree 1 file changed +10
-6
lines changed Original file line number Diff line number Diff line change @@ -508,28 +508,32 @@ for (let line of readLinesSync(fileName)) {
508508
509509## for...of循环
510510
511- ES6借鉴C ++、Java、C#和Python语言 ,引入了` for...of ` 循环,作为遍历所有数据结构的统一的方法。一个数据结构只要部署了 ` Symbol.iterator ` 属性,就被视为具有iterator接口,就可以用 ` for...of ` 循环遍历它的成员。也就是说, ` for...of ` 循环内部调用的是数据结构的 ` Symbol.iterator ` 方法 。
511+ ES6 借鉴 C ++、Java、C# 和 Python 语言 ,引入了` for...of ` 循环,作为遍历所有数据结构的统一的方法。
512512
513- for...of循环可以使用的范围包括数组、Set和Map结构、某些类似数组的对象(比如arguments对象、DOM NodeList对象)、后文的Generator对象,以及字符串。
513+ 一个数据结构只要部署了` Symbol.iterator ` 属性,就被视为具有iterator接口,就可以用` for...of ` 循环遍历它的成员。也就是说,` for...of ` 循环内部调用的是数据结构的` Symbol.iterator ` 方法。
514+
515+ ` for...of ` 循环可以使用的范围包括数组、Set 和 Map 结构、某些类似数组的对象(比如` arguments ` 对象、DOM NodeList 对象)、后文的 Generator 对象,以及字符串。
514516
515517### 数组
516518
517- 数组原生具备iterator接口 ,` for...of ` 循环本质上就是调用这个接口产生的遍历器,可以用下面的代码证明。
519+ 数组原生具备 ` iterator ` 接口(即默认部署了 ` Symbol.iterator ` 属性) ,` for...of ` 循环本质上就是调用这个接口产生的遍历器,可以用下面的代码证明。
518520
519521``` javascript
520522const arr = [' red' , ' green' , ' blue' ];
521- let iterator = arr[Symbol .iterator ]();
522523
523524for (let v of arr) {
524525 console .log (v); // red green blue
525526}
526527
527- for (let v of iterator) {
528+ const obj = {};
529+ obj[Symbol .iterator ] = arr[Symbol .iterator ].bind (arr);
530+
531+ for (let v of obj) {
528532 console .log (v); // red green blue
529533}
530534```
531535
532- 上面代码的 ` for...of ` 循环的两种写法是等价的 。
536+ 上面代码中,空对象 ` obj ` 部署了数组 ` arr ` 的 ` Symbol.iterator ` 属性,结果 ` obj ` 的 ` for...of ` 循环,产生了与 ` arr ` 完全一样的结果 。
533537
534538` for...of ` 循环可以代替数组实例的` forEach ` 方法。
535539
You can’t perform that action at this time.
0 commit comments