2013-05-13 46 views
0

我读重新引入到JavaScript中的MDN网站上,并在Array段跨越这个例子就是:JavaScript数组迭代 - MDN例如

for (var i = 0, item; item = a[i++];){ 
    // Do something with item 
} 

其中“a []”是一个数组绕环过度。

我很困惑“项目”在第一次迭代中的价值。由于i = 0且item最初未定义,因此当它被赋值为[i ++]时,迭代不会从i = 1开始,这意味着迭代将从a [ ]数组 - > a [1],完全跳过第一个元素a [0]?

+1

注意,一旦该阵列中的当前元素是'0'或'FALSE',环路将结束。 – Vlad 2013-05-13 16:24:53

+0

这是我之前在JavaScript中看到的最糟糕的循环之一。您可以保存1-2个字符。但牺牲索引变量和可读性的有用性。 – SoonDead 2013-05-13 16:58:30

回答

4

i++增量操作,这意味着它通过1递增i但计算结果为旧的(非递增)值。

> i = 0 
    0 
> i++ 
    0 
> i 
    1 
+0

非常感谢您为我清理这个问题。 :) – SineLaboreNihil 2013-05-13 16:19:34

+1

请注意,在某些语言中,'++ i'也存在,它会进行预先递增,因此它立即具有新的值。 – Halcyon 2013-05-13 16:21:17

+0

++如果想使用它,我也存在于JS中 – demee 2013-05-13 16:23:54

1

i ++在意味着JavaScript的读取I值,然后将它加

2

我++是后增量(见其他解答)和项目不会被未定义,因为谓词(在for循环的第二部分)在每次迭代之前执行。

for (var i = 0, item ; item = a[i++];) { 

将评估为:

var i = 0; 
var item; 

item = a[i]; // loop 
i += 1 
if (!item) // exit loop 
// loop body 
// start again at loop 

与此语法的问题是,如果在a值为falsy,循环将提前终止。

var a = [1,2,0,3,4]; 
for (var i = 0, item ; item = a[i++];) { 
    console.log(item); 
} 

将输出“1 2”,因为“0”是falsy,循环终止

+0

JavaScript中有很多意想不到的错误值。例如,请看[this](http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/)。 – SoonDead 2013-05-13 17:02:11