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语句
但我无法理解其他结果。
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语句
但我无法理解其他结果。
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
if([]==true){}//false
[]不是布尔值,它是一个数组。这就是说,一个空数组是一个布尔真。它不是 - 它是一个空阵列。
if([]){}将其评估为定义而非null。
这是正确的,但它不能解释为什么if([1] == true){} // true'。据我所知,'[1]'是'1'这是'真' – Aleadam 2011-03-28 17:37:51
接受一些答案1 .... – Neal 2011-03-28 17:24:44
同意 - 不要指望别人帮助,如果你不打算遵守问/应答/接受的SO协议。 (我们不期望100%接受,但0%是荒谬的) – 2011-03-28 17:29:06
我相信一个空阵列'[]'强制为数值'0'。 – 2011-03-28 17:34:42