for/in 循环对象到数组

For/In Loop Object to Array

本文关键字:数组 对象 循环 in for      更新时间:2023-09-26

有人可以外行向我解释循环中发生的事情,因为它迭代生成语句(对象属性在数组中)。

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

以下是 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.

注意: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);
}

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

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

首先评估i++++是一个后增量运算符,因人们弄错该死的东西而臭名昭著。道格拉斯·克罗克福德(寻找他)建议不要使用它。它返回存储在 i 中的值(为 0),然后递增它。

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

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

无论这段代码是什么,我都建议替换它。它不应该是您希望在代码中看到的内容。这令人困惑,肯定没有任何意义。