2014-06-27 45 views
1

我發現這些代碼行言聽觸摸事件庫:條件語句for循環簡單,因爲我

for (var i = elements.length; i; i--) { 
    iterator(elements[ i - 1 ], elements); 
    } 

這讓我感到驚訝了一秒鐘。我通過這種方式理解代碼:我是一個整數正數或空值,條件語句是如果我是積極的。
我理解對嗎?當我== - 1時,我會返回false嗎?還是我錯過了一些東西(比如可以寫一個沒有條件語句的for循環)?

+3

這只是一個反向的for循環,在修改nodeList時避免出現問題的情況下,它非常常見於活動nodeLists。否則,你似乎可以得到它,並且在循環中記錄「i」並查看它何時停止應該是微不足道的。 – adeneo

回答

3

的條件基本上是if(i) proceedToNextIteration();

隨着數字去,只有零是falsy和會失敗的檢查。在上述情況下,-1將爲真。

出於這個原因,我想重寫代碼:

for(var i = elements.length-1; i >= 0; i--) { 
    iterator(elements[i], elements); 
} 

它更明確的關於它的最終狀態。

+0

是的,但是當包含空格時,它就像** 5個以上的字符**。這就像**很多**! –

+0

在我看來,這是完全不必要的,並且不容易閱讀,當迭代nodeList並使用'i - '時,不可能在零以外的任何地方結束。我會寫它爲'(var i = elements.length; i--;){...' – adeneo

+0

非常明確,我現在明白這個代碼的工作方式。我發佈的代碼是否可以與任何for循環一起使用,還是隻能與nodeList一起使用? – EtienneWan

2

這是在JavaScript中for statement的結構:

for ([initialization]; [condition]; [final-expression]) 
    statement 

您提供 聲明(VAR I = elements.length;我;我 - )

堅持這一語法。這是相同

for(var i = 10; i!=0; i--) 

含義循環從10elements.length)至1。類似於從110的循環。

在Javascript中,條件i != 0可以用i代替。

含義:

if(i != 0) 

if (i) 

是相同的。這就是條件部分所做的。

將列表或數組中的元素從max移到0對於從其中刪除項目很有幫助。

+1

爲了準確,條件是'i!= 0',而不是'i> 0'。 –

+0

@NiettheDarkAbsol有效點,已更新。 – Nivas

+0

不錯的答案。此外,如果不使用if語句(如:if(i){j = true} else {j = false}),我們可以從整數中得到真或假嗎? – EtienneWan