【问题标题】:What is the difference between for..in and for each..in in javascript?javascript中的for..in和for each..in有什么区别?
【发布时间】:2010-10-12 16:32:23
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

"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

【讨论】:

  • @Vijay:是的 - 它是在 JavaScript 1.6 中引入的,即 Mozilla 扩展
【解决方案2】:

此演示有望说明差异。

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"
}

【讨论】:

    【解决方案3】:

    阅读优秀的 MDC 文档。

    first 用于正常循环集合和任意对象的属性。

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

    for...in 循环以任意顺序迭代对象的属性。如果一个属性在一次迭代中被修改,然后在稍后的时间被访问,则循环公开的值将是它在稍后时间的值。在访问之前删除的属性将不会在以后被访问。添加到发生迭代的对象的属性可以在迭代中访问或省略。一般来说,在迭代过程中最好不要在对象中添加、修改或删除属性,除了当前正在访问的属性;无法保证添加的属性是否会被访问,修改后的属性是否会在修改之前或之后被访问,或者删除的属性是否会在删除之前被访问。

    latter 允许您遍历对象的属性。

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

    【讨论】:

      【解决方案4】:

      除了其他答案,请记住 for each...in 不是 ECMA 标准的一部分,也不包含在 upcoming edition 3.1 中。它是在 JavaScript 1.6 中引入的,它是 Mozilla 基金会的 extension of ECMAScript3

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

      【讨论】:

      • 换句话说,它是“仅限火狐”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多