在javascript中for..in和each..in有什么区别?

时间:2009-03-11 14:06:49

标签: javascript loops foreach enumeration for-in-loop

javascript中for..in和each..in语句有什么区别? 是否存在我不知道的细微差别,或者它是否相同,每个浏览器都有不同的名称?

4 个答案:

答案 0 :(得分:12)

“for each ... in”在指定对象属性的所有值上迭代指定变量。

示例:

var sum = 0;
var obj = {prop1: 5, prop2: 13, prop3: 8};
for each (var item in obj) {
  sum += item;
}
print(sum); // prints "26", which is 5+13+8

Source

“for ... in”以任意顺序在对象的所有属性上迭代指定变量。

示例:

function show_props(obj, objName) {
   var result = "";
   for (var i in obj) {
      result += objName + "." + i + " = " + obj[i] + "\n";
   }
   return result;
}

Source


注03.2013,for each... in循环为deprecated。 MDN推荐的“新”语法为for... of

答案 1 :(得分:7)

这个演示应该有希望说明不同之处。

var myObj = {
    a : 'A',
    b : 'B',
    c : 'C'
};
for each (x in myObj) {
    alert(x);        // "A", "B", "C"
}
for (x in myObj) {
    alert(x);        // "a", "b", "c"
    alert(myObj[x]); // "A", "B", "C"
}

答案 2 :(得分:2)

阅读优秀的MDC文档。

first用于正常循环集合,并且可以在对象的属性上任意循环。

  

for ... in循环不会迭代内置属性。这些包括对象的所有内置方法,例如String的indexOf方法或Object的toString方法。但是,循环将遍历所有用户定义的属性(包括任何覆盖内置属性的属性)。

     

for ... in循环以任意顺序迭代对象的属性。如果在一次迭代中修改属性,然后在稍后访问该属性,则循环公开的值将是其稍后的值。在访问之前删除的属性将不会在以后访问。添加到正在进行迭代的对象的属性可以在迭代中被访问或省略。通常,除了当前正在访问的属性之外,最好不要在迭代期间添加,修改或删除对象的属性;无法保证是否会访问添加的属性,是否在修改之前或之后访问修改后的属性,或者删除属性是否会被删除。

latter允许您循环对象的属性。

  

在对象属性的所有值上迭代指定的变量。对于每个不同的属性,执行指定的语句。

答案 3 :(得分:2)

除了其他答案之外,请注意for each...in不是ECMA标准的一部分,也不包含在upcoming edition 3.1中。它是在JavaScript 1.6中引入的,这是Mozilla Foundation的extension of ECMAScript3

根据链接的维基百科页面,它仅在Firefox 1.5+和Safari 3.x(+?)中实现。