有人可以向外行介绍一下当循环产生语句(对象属性在数组中)时循环中发生了什么。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。 –