2013-05-13 47 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