2013-10-17 139 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個密鑰。因此,它重複循環三次。每次它將對象記錄到控制檯。

無論這段代碼是什麼,我建議替換它。它不應該是你想在代碼中看到的東西。這很混亂,肯定沒有做任何有意義的事情。