2016-02-15 77 views
0

即使第一個條件失敗,javascript是否進一步評估爲多個AND標準語句是否真的如此?爲什麼JavaScript評估多個和標準如果第一個標準失敗

我有以下聲明:

if(data.equipment_notifications != "undefined" && data.equipment_notifications.length > 0) 

我假定條件將無法在初始標準,甚至沒有嘗試評估第二,因爲如果第一個失敗(假的)整個條件總是在涉及到時,它是錯誤的,因此它會跳過一步。

但我得到「無法讀取屬性」的'未定義的長度',這表明它不會跳過第一個失敗的標準之後。

問題:確實,JavaScript會評估一個語句的整個標準,即使第一個語句失敗,並且無論其他標準的評估如何都會失敗整個語句?

更新:在JavaScript中評估表達式時給出的答案是正確的。而且我發現我做的在我的測試遺忘TYPEOF爲「不確定的」一個愚蠢的錯誤

if(typeof data.equipment_notifications != "undefined" && data.equipment_notifications.length > 0) 

回答

3

爲什麼JavaScript的評估多個和審覈規定,如果第一準則失敗

事實並非如此。

確實,JavaScript會評估一個語句的整個標準,即使第一個語句失敗了,無論其他標準的評估如何都會失敗整個語句?

不,這是不正確的。 JavaScript使用short-circuit evaluation

這是十分容易證明自己:

function a() { alert('a'); return false} 
function b() { alert('b'); return true } 

if (a() && b()) { alert('c') } 

如果JavaScript的 「評估整個exression」,它會提醒雙方ab。但是,因爲&&的第一個操作數是錯誤的,JavaScript不會評估第二個操作數。


,但我得到「無法讀取屬性未定義‘長’」,這表明它不第一個失敗的條件後跳過。

不,這根本就不是什麼意思。您正在測試字符串"undefined"undefined"undefined"是兩個完全不同的東西。

+0

你的權利..我發現我的聲明中的錯誤。我在我的第一個標準開始時也錯過了一個typeof。但是..感謝您對javascript評估的幫助和啓發:) – DTH