JavaScript迭代器
我在浏览MDN(Mozilla开发者网络)时遇到了 很自然,我尝试了谷歌Chrome v21页面中给出的代码片段。具体而言,此代码: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 为什么?迭代器函数是不推荐的还是什么?我漏掉了
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();