2012-08-11 81 views
0

因爲我發現這個片段,我經常使用它遍歷數組:使用「for(i = 0; elem = array [i]; i ++)」來迭代數組有什麼風險?

for (i = 0; elem = array[i]; i++) doStuff(elem); 

這顯然是非常錯誤的,如果array可以包含任何計算結果爲假(''undefinednull0,false)。但是如果您確定情況並非如此,那麼是否有人會看到使用此方法的另一個風險?

我在問這個問題,因爲它似乎不是很常用,雖然它對我來說似乎非常棒,所以我開始考慮我有一個明顯的缺點。

+0

那麼,明顯的缺點是你提到的那個。你可以保證只有真理元素是非常罕見的。 – JJJ 2012-08-11 20:05:01

+0

說到JavaScript,人們永遠不能太確定。 – BoltClock 2012-08-11 20:19:19

+0

由於歌曲就像你自己的個人代碼一樣,並不重要,但是如果它有機會被其他人使用,那麼這是一個難以發現錯誤的機會。即使你自己的代碼,如果你改變了一些......所以我不認爲你應該使用它。它可能會咬你。 – some 2012-08-11 20:20:16

回答

6

你知道的缺點,只要你能和他們一起生活...

沒有缺點的另一種方式可能是

for (var i = 0, l = array.length, elem; i < l; elem = array[i++]) 

,但它可能是比較模糊的。

+0

我通常會寫'for(var idx = 0,len = array.length; idx some 2012-08-11 20:25:50

+0

我很喜歡它:),因爲它是隱晦的... – sebpiq 2012-08-11 20:41:03

5

我認爲至少有兩大弊端:

  • 首先你已經提到:如果數組包含一個falsy值這是行不通的。您不能始終確定沒有任何元素會出現虛假現象,現在爲,並且在將來中添加了新功能。
  • 第二個是它的非標準混淆。它會讓其他開發人員不得不維護你的代碼,試圖弄清楚爲什麼你這樣做,而不是一個正常的循環。或者他們可能將其誤讀爲elem == array[i]

保持簡單,無論是你自己還是你的同事。

for (var i = 0; i < array.length; i++) { 
    var elem = array[i]; 
    doStuff(elem); 
} 
相關問題