2011-03-28 82 views
1
if([]){}//true 
if([]==true){}//false 
if([1]==true){}//true 
if([2]==true){}//false 
if([1,2]==true){}//false 
if(['Hi']==true){}//false 
if([{aaa:1}]==true){}//false 

[ ]是數組。數組是對象。對象是真的,所以[ ]是真的。還行吧。Array和if語句

但我無法理解其他結果。

+0

接受一些答案1 .... – Neal 2011-03-28 17:24:44

+0

同意 - 不要指望別人幫助,如果你不打算遵守問/應答/接受的SO協議。 (我們不期望100%接受,但0%是荒謬的) – 2011-03-28 17:29:06

+0

我相信一個空陣列'[]'強制爲數值'0'。 – 2011-03-28 17:34:42

回答

1
if([]){}//true 

所有的JavaScript對象是truthy - 他們都強迫爲布爾值true


if([]==true){}//false 

如果一個操作數是一個對象,而另一個操作數是一個布爾,則兩個操作數強制成數字值。這裏

0 == 1 // false 

if([1]==true){}//true 

同樣的事情:一個空數組會強制給0。對於具有一個項的陣列,該項目將迫使對數與該值進行比較,以另一個操作數:

1 == 1 // true 

if([2]==true){}//false 

是:

2 == 1 // false 

if([1,2]==true){}//false 

如果數組有多個項目,則強制爲Number會導致NaN

NaN == 1 // false 

if(['Hi']==true){}//false 

字符串脅迫到數字值NaN

NaN == 1 // false 

if([{aaa:1}]==true){}//false 

一個目的還脅迫到數字值NaN

NaN == 1 // false 
+0

這是好東西,有沒有一個參考或簡單的方法來測試自己什麼強制正在發生? – Ryley 2011-03-28 18:21:23

+0

@Ryley只是閱讀規範:http://es5.github.com/#x11.9.3它說這一切都在那裏。強制規則是4. - 9. – 2011-03-28 18:25:21

+0

完美,我只是想確保信息被附加到這個答案:) – Ryley 2011-03-28 18:28:49

0
if([]==true){}//false 

[]不是布爾值,它是一個數組。這就是說,一個空數組是一個布爾真。它不是 - 它是一個空陣列。

if([]){}將其評估爲定義而非null。

檢查:http://11heavens.com/falsy-and-truthy-in-javascript

+0

這是正確的,但它不能解釋爲什麼if([1] == true){} // true'。據我所知,'[1]'是'1'這是'真' – Aleadam 2011-03-28 17:37:51