For / In Loop Object to Array

时间:2013-10-17 12:34:24

标签: javascript loops object

有人可以向外行人解释一下循环中发生了什么,因为它迭代生成语句(对象属性在数组中)。

var o = {x:1, y:2, z:3};
var a = [], i = 0;

for (a[i++] in o)
{
    console.log(o);
}

2 个答案:

答案 0 :(得分:2)

这是for / in循环的评估方式:

for each property in object o
     assign the property name to the left hand side, that is a[i++]

最初为i = 0,所以:

  1. a[0]将获得x。 //注意它获取属性名称,而不是其值
  2. a[1]将获得y
  3. a[2]将获得z
  4. 注意: i++等于i = i + 1

    之前的代码等同于以下内容:

    var o = {x:1, y:2, z:3};
    var a = []
    var i = 0;
    
    for (propertyName in o)
    {
        a[i] = propertyName;
        i = i + 1;
        console.log(o);
    }
    

答案 1 :(得分:0)

它为一个对象分配三个键(x,y,z)到o。它将一个空数组分配给a,将数字0分配给i

for ( in )循环将迭代对象的属性,但首先评估条件。

首先评估

i++++是一个后增量运算符,并且因为该死的错误而臭名昭着。道格拉斯·克罗克福德(寻找他)建议不要使用它。它返回i中存储的值(为0),然后递增它。

所以现在我正在存储1,我们正在评估一个[0],它正在访问一个数组中的元素,除了......那个数组是空的(我们正在访问一个未定义的值)。

它现在查看in o,它遍历o中的键,其中有3个。因此,它迭代循环三次。每次它都将对象记录到控制台。

无论这段代码是什么,我建议更换它。它不应该是你想在代码中看到的东西。这令人困惑,肯定没有任何意义。