2013-10-17 113 views
0

有人可以向外行介绍一下当循环产生语句(对象属性在数组中)时循环中发生了什么。For/In Loop Object to Array

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

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

对你来说非常基本的东西Java!= Javascript。 –

回答

2

这是怎么了/在循环评估:

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); 
} 
0

它分配一个对象,具有三个键(X,Y,Z)来o。它分配一个空数组到a,数字0到i

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

i++首先被评估。 ++是一个后增加的操作符,对于让这个该死的东西错误的人而言是臭名昭着的。 Douglass Crockford(搜索他)建议不要使用它。它返回存储在i(这是0)中的值,然后增加它。所以现在我正在存储1,并且我们正在评估一个[0],它正在访问数组中的一个元素,除了...该数组是空的(我们正在访问一个未定义的值)的数组。

现在看看in o,它遍历了o中的密钥,其中有3个密钥。因此,它重复循环三次。每次它将对象记录到控制台。

无论这段代码是什么,我建议替换它。它不应该是你想在代码中看到的东西。这很混乱,肯定没有做任何有意义的事情。