Javascript 使用Array.prototype.forEach()方法

Javascript 使用Array.prototype.forEach()方法,javascript,Javascript,据说forEach()方法用于循环任何类似数组的对象 Array.prototype.forEach.call({1:"a",2:"b"},function(eleVal,ele){alert(eleVal+":"+ele)}) 上面的代码不起作用,为什么???因为{1:“a”,2:“b”}不是数组,而是对象Array.forEach要求其目标具有length属性,而此对象没有 尝试使用一个数组,例如[“a”,“b”],它会工作,或者使用类似的数组 {0: "a", 1: "b", lengt

据说forEach()方法用于循环任何类似数组的对象

Array.prototype.forEach.call({1:"a",2:"b"},function(eleVal,ele){alert(eleVal+":"+ele)})
上面的代码不起作用,为什么???

因为
{1:“a”,2:“b”}
不是数组,而是对象
Array.forEach
要求其目标具有
length
属性,而此对象没有

尝试使用一个数组,例如
[“a”,“b”]
,它会工作,或者使用类似的数组

{0: "a", 1: "b", length: 2}

向对象添加一个
.length
属性,它就会工作

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

[].slice.call({1: 'a', 2: 'b', length: 3})
[undefined × 1, "a", "b"]

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

var obj = {1:"a", 2:"b"};
for(var i in obj) { if(obj.hasOwnProperty(i)) console.log(i + ':' + obj[i]); }

但它是数组,更像是散列。它不是数组。@Maizere:ECMAScript详细说明了
.forEach
应该如何工作。请注意,它要求对象具有
length
属性。由于有多人对该答案投了反对票,因此该对象一定有问题。我们可以得到一些反馈吗?当OP指定了
forEach
方法时,您可以通过说明为什么演示这种循环形式来改进您的答案。并考虑在循环中使用<代码> HasObjyAs/<代码>进行过滤。你的副作用将与原来的不同。@Maizer如果你说你的代码不起作用,我只展示了解决问题的其他方法。许多人问为什么他们的代码不起作用,而他们只是不知道更好的方法。我是出于好意。@Seza编辑你的问题,这样我就可以投票了,谢谢你的练习