2011-03-28 109 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