arr[Symbol.iterator]每一个数组、伪数组、new Set()、 new Map() 中都有一个Symbol.interator 接口, 每个Symbol.interator中都抛出一个next() 函数, next 中都返回两个属性,一个value, 一个done。
第一种
var arr = ['a', 'b', 'c', 'd', 'e'];
var eArr = arr[Symbol.iterator](); //此返回的是一个方法可以被for of循环使用
// 浏览器必须支持 for...of 循环
for (let letter of eArr) {
console.log(letter); // a b c d e
}
第二种
var arr = ['a', 'b', 'c', 'd', 'e'];
var eArr = arr[Symbol.iterator]();
//按照线性顺序 当第一次调用这个方法后==》a,再次调用==>b
console.log(eArr.next().value); // a
console.log(eArr.next().value); // b
console.log(eArr.next().value); // c
console.log(eArr.next().value); // d
console.log(eArr.next().value); // e
function logIterable(it) {
var iterator = it[Symbol.iterator]();
// 浏览器必须支持 for...of 循环
for (let letter of iterator) {
console.log(letter);
}
}
// Array
logIterable(['a1', 'b', 'c']);
// a1
// b
// c
// string
logIterable('abc999');
// a
// b
// c
// 9
// 9
// 9