--- title: Iterator slug: Web/JavaScript/Reference/Global_Objects/Iterator tags: - Deprecated translation_of: Archive/Web/Iterator ---
Iterator 函数是一个 SpiderMonkey 专有特性,并且会在某一时刻被删除。为将来使用的话,请考虑使用 {{jsxref("Statements/for...of", "for...of")}} 循环和 迭代协议。Iterator 函数返回一个对象,它实现了遗留的迭代协议,并且迭代了一个对象的可枚举属性。
Iterator(object, [keyOnly])
objectkeyOnlykeyOnly是真值,Iterator.prototype.next 只返回property_name 。返回迭代了object的Iterator 实例。如果keyOnly为假值,则Iterator 实例返回每次迭代而生成的 [property_name, property_value] 数组,否则,如果keyOnly是真值,则它返回每次迭代的 property_name。如果object 是 Iterator 实例或 {{jsxref("Generator")}} 实例 ,则它返回 object 自身。
Iterator.prototype[@@iterator]Iterator.prototype.next[property_name, property_value] 格式或property_name 的下一项。 如果没有更多项,抛出 StopIteration 。var a = {
x: 10,
y: 20,
};
var iter = Iterator(a);
console.log(iter.next()); // ["x", 10]
console.log(iter.next()); // ["y", 20]
console.log(iter.next()); // throws StopIteration
解构for-in迭代对象的属性var a = {
x: 10,
y: 20,
};
for (var [name, value] in Iterator(a)) {
console.log(name, value); // x 10
// y 20
}
for-of迭代var a = {
x: 10,
y: 20,
};
for (var [name, value] of Iterator(a)) { // @@iterator is used
console.log(name, value); // x 10
// y 20
}
var a = {
x: 10,
y: 20,
};
for (var name in Iterator(a, true)) {
console.log(name); // x
// y
}
function* f() {
yield 'a';
yield 'b';
}
var g = f();
console.log(g == Iterator(g)); // true
for (var v in Iterator(g)) {
console.log(v); // a
// b
}
var a = {
x: 10,
y: 20,
};
var i = Iterator(a);
console.log(i == Iterator(i)); // true
非标准。不是目前任何标准文档的一部分。
{{CompatibilityTable}}
| Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Basic support | {{CompatNo}} | {{CompatVersionUnknown}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |
| Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Basic support | {{CompatNo}} | {{CompatNo}} | {{CompatVersionUnknown}} | {{CompatNo}} | {{CompatNo}} | {{CompatNo}} |