可迭代对象是可以迭代的对象for..of
。
从技术上讲,iterables 必须实现Symbol.iterator
方法。
您可以使用for..of
循环遍历字符串的元素:
您可以使用for..of
循环遍历数组的元素:
这个迭代器协议定义了如何产生值序列来自一个物体。
一个物体变成了一个迭代器当它实现一个next()
方法。
这个next()
方法必须返回具有两个属性的对象:
值 | 迭代器返回的值 (如果done为true则可以省略) |
---|---|
完毕 | 真的如果迭代器已经完成 错误的如果迭代器产生了新值 |
这个迭代返回永无止境:10,20,30,40,....每次 next()
叫做:
// Home Made Iterable
function myNumbers() {
let n = 0;
return {
next: function() {
n += 10;
return {value:n, done:false};
}
};
}
// Create Iterable
const n = myNumbers();
n.next(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30
亲自试一试 »
使其变得可迭代:
它不支持 JavaScriptfor..of
陈述。
JavaScript 可迭代对象是一个具有符号迭代器。
这个Symbol.iterator
是一个可以返回next()
函数的迭代器。
可以使用以下代码迭代可迭代对象:for (const x of iterable) { }
// Create an Object
myNumbers = {};
// Make it Iterable
myNumbers[Symbol.iterator] = function() {
let n = 0;
done = false;
return {
next() {
n += 10;
if (n == 100) {done = true}
return {value:n, done:done};
}
};
}
现在你可以使用for..of
for (const num of myNumbers) {
// Any Code Here
}
亲自试一试 »
Symbol.iterator 方法被自动调用for..of
。
但我们也可以这样做"manually":
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}
亲自试一试 »
截取页面反馈部分,让我们更快修复内容!也可以直接跳过填写反馈内容!