有人可以向外行介紹一下當循環產生語句(對象屬性在數組中)時循環中發生了什麼。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);
}
有人可以向外行介紹一下當循環產生語句(對象屬性在數組中)時循環中發生了什麼。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);
}
這是怎麼了/在循環評估:
for each property in object o
assign the property name to the left hand side, that is a[i++]
最初i = 0
,所以:
a[0]
將得到x
。 //注意它獲取屬性名稱,而不是它的值a[1]
將得到y
。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++
首先被評估。 ++
是一個後增加的操作符,對於讓這個該死的東西錯誤的人而言是臭名昭着的。 Douglass Crockford(搜索他)建議不要使用它。它返回存儲在i
(這是0)中的值,然後增加它。所以現在我正在存儲1,並且我們正在評估一個[0],它正在訪問數組中的一個元素,除了...該數組是空的(我們正在訪問一個未定義的值)的數組。
現在看看in o
,它遍歷了o
中的密鑰,其中有3個密鑰。因此,它重複循環三次。每次它將對象記錄到控制檯。
無論這段代碼是什麼,我建議替換它。它不應該是你想在代碼中看到的東西。這很混亂,肯定沒有做任何有意義的事情。
對你來說非常基本的東西Java!= Javascript。 –