2

据说 forEach() 方法用于循环任何数组,如 object 。但是在这里

Array.prototype.forEach.call({1:"a",2:"b"},function(eleVal,ele){alert(eleVal+":"+ele)})

上面的代码不起作用,为什么?

4

3 回答 3

4

因为{1: "a", 2: "b"}不是数组,而是对象。Array.forEach要求它的目标有一个length属性,而这个对象没有。

尝试使用这样的数组["a", "b"],它会起作用,或者使用看起来相似的数组

{0: "a", 1: "b", length: 2}
于 2013-06-19T12:03:37.360 回答
3

向对象添加一个.length属性,它将起作用。

请注意,您的索引将从 0 开始,因此第一个元素将是未定义的。

[].slice.call({1: 'a', 2: 'b', length: 3})
[undefined × 1, "a", "b"]
于 2013-06-19T12:05:21.367 回答
1

另一种方法。我更喜欢这个,因为它不会修改原始对象。

var obj = {1:"a", 2:"b"};
for(var i in obj) { if(obj.hasOwnProperty(i)) console.log(i + ':' + obj[i]); }
于 2013-06-19T12:16:56.283 回答