我正在浏览MDN(Mozilla开发者网络)并遇到Iterators and generators
很自然地,我尝试了Google Chrome v21页面中提供的代码片段。具体来说,这段代码:
var it = Iterator(lang);
for (var pair in it)
print(pair); // prints each [key, value] pair in turn
但是,控制台会返回以下错误消息:
ReferenceError: Iterator is not defined
为什么? Iterator函数是否已被弃用?我错过了一点吗?感谢您的帮助和时间: - )
答案 0 :(得分:6)
数组有一个内置的map函数,就像迭代器一样。
[1,2,3].map(function(input){console.log(input)});
标准输出:
1
2
3
最糟糕的情况是你可以很容易地设计一个迭代器对象,没有对它进行全面测试,但是如果有任何错误,你应该能够快速实现这一点。
var Iterator = function(arr){ return {
index : -1,
hasNext : function(){ return this.index <= arr.length; },
hasPrevious: function(){ return this.index > 0; },
current: function(){ return arr[ this["index"] ]; },
next : function(){
if(this.hasNext()){
this.index = this.index + 1;
return this.current();
}
return false;
},
previous : function(){
if(this.hasPrevious()){
this.index = this.index - 1
return this.current();
}
return false;
}
}
};
var iter = Iterator([1,2,3]);
while(iter.hasNext()){
console.log(iter.next());
}
答案 1 :(得分:4)
window.Iterator
AFAIK仅存在于Firefox中,而不存在于WebKit中。
答案 2 :(得分:3)
来自this thread:
V8是ECMAScript的实现,而不是JavaScript。后者是Mozilla制作的ECMAScript的非标准化扩展。
V8旨在与JSC(WebKit / Safari中的ECMAScript实现)兼容。因此,它实现了许多ECMAScript的非标准扩展,这些扩展也在JSC中,其中大多数也是Mozilla的JavaScript语言。
没有计划将不在JSC中的非标准功能添加到V8。
注意:JSC代表JavaScript Core - WebKit ECMAScript实现。
答案 3 :(得分:2)
var makeIterator = function (collection, property) {
var agg = (function (collection) {
var index = 0;
var length = collection.length;
return {
next: function () {
var element;
if (!this.hasNext()) {
return null;
}
element = collection[index][property];
index = index + 1;
return element;
},
hasNext: function () {
return index < length;
},
rewind: function () {
index = 0;
},
current: function () {
return collection[index];
}
};
})(collection);
return agg;
};
var iterator = makeIterator([5,8,4,2]);
console.log(iterator.current())//5
console.log( iterator.next() )
console.log(iterator.current()) //8
console.log(iterator.rewind());
console.log(iterator.current()) //5
答案 4 :(得分:1)
这意味着Chrome v21不支持JavaScript的这一功能。这是1.7规范的一部分。 Trying this可能有助于在Chrome中明确指定1.7支持。
答案 5 :(得分:0)
对于chrome,你可以使用这个
var someArray = [1, 5, 7];
var someArrayEntries = someArray.entries();
这里是link,您可以找到有趣的