以下代码引用了 Firefox 特定的 JavaScript 1.7 实现,其中包含数组理解和迭代器/生成器。请注意,在撰写本文时,Webkit 浏览器(Chrome、Safari)尚不支持“Iterator”、“yield”和数组解析,并且似乎仅适用于 Firefox 的 JavaScript 引擎(Google、liberateme)。
注意:ECMAScript Harmony 可能会对语法带来新的变化,并可能使这篇文章过时
var myobject = {'foo':5,'bar':10};
var myarray = [10,20,30];
for (var i in it) {
console.log(i);
}
代码:
JavaScript:
//if var it = Iterator(myobject);
['foo',5]
['bar',10]
//if var it = Iterator(myarray);
[0,10]
[1,20]
[2,30]
似乎 JS 1.7 迭代器总是返回一个“键”和一个“值”(无论键是实际的对象键还是数组的索引。与 Python 相比,迭代器足够聪明,如果它只返回 1 个值)是一个数组。
Python:
#if it = iter(myobject);
[foo,5]
[bar,10]
#if it = iter(myarray);
10,
20,
30
所以问题是,当我尝试移植 Python 到 JavaScript 函数时,为什么 Iterator() 和 iter() 不做同样的事情?