JavaScript迭代器

JavaScript迭代器,javascript,Javascript,我在浏览MDN(Mozilla开发者网络)时遇到了 很自然,我尝试了谷歌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 为什么?迭代器函数是不推荐的还是什么?我漏掉了

我在浏览MDN(Mozilla开发者网络)时遇到了

很自然,我尝试了谷歌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

为什么?迭代器函数是不推荐的还是什么?我漏掉了一点吗?感谢您的帮助和时间:-)

窗口。迭代器只存在于Firefox中,而不存在于WebKit中。

来自:

V8是ECMAScript的实现,而不是JavaScript。后者是Mozilla制作的ECMAScript的非标准化扩展

V8旨在与JSC插件兼容,JSC是WebKit/Safari中的ECMAScript实现。因此,它实现了许多ECMAScript的非标准扩展,这些扩展也是在JSC中实现的,其中大多数也是在Mozilla的JavaScript语言中实现的

没有计划将JSC中没有的非标准特性添加到V8中


注意:JSC代表WebKit ECMAScript实现。

这意味着Chrome v21不支持JavaScript的该功能。它是1.7规范的一部分。可能有助于在Chrome中明确指定1.7支持。

数组有一个内置的映射函数,其作用类似于迭代器

[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());
}
var迭代器=函数(arr){return{
索引:-1,
hasNext:function(){返回this.index 0;},
当前:函数(){return arr[this[“index”]];},
下一步:函数(){
if(this.hasNext()){
this.index=this.index+1;
返回this.current();
} 
返回false;
},
上一个:函数(){
if(this.hasPrevious()){
this.index=this.index-1
返回this.current();
}
返回false;
}
}   
};
var iter=迭代器([1,2,3]);
while(iter.hasNext()){
log(iter.next());
}
var makeIterator=函数(集合、属性){
var agg=(函数(集合){
var指数=0;
var length=collection.length;
返回{
下一步:函数(){
var元素;
如果(!this.hasNext()){
返回null;
}
元素=集合[索引][属性];
指数=指数+1;
返回元素;
},
hasNext:函数(){
返回指数<长度;
},
倒带:函数(){
指数=0;
},
当前:函数(){
返回集合[索引];
}
};
})(收集);
返回agg;
};
var iterator=makeIterator([5,8,4,2]);
console.log(iterator.current())//5
console.log(iterator.next())
console.log(iterator.current())//8
log(iterator.rewind());
console.log(iterator.current())//5

对于chrome,您可以使用此

var someArray = [1, 5, 7];
var someArrayEntries = someArray.entries();

下面是一个,您可以发现它有点相关:Maybee hasNext:function(){返回this.indexvar someArray = [1, 5, 7]; var someArrayEntries = someArray.entries();