数组和if语句

时间:2011-03-28 17:24:09

标签: javascript arrays

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

[ ]是数组。数组是对象。对象为true,因此[ ]为真。这没关系。

但我无法理解其他结果。

3 个答案:

答案 0 :(得分:1)

if([]){}//true

所有JavaScript对象都是真实的 - 它们都强制转换为布尔值true


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

如果一个操作数是一个Object,另一个操作数是一个布尔值,则两个操作数都强制转换为Number值。空数组将强制转换为0

0 == 1 // false

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

这里也是一样的。对于包含一个项目的数组,该项目将强制为Number,该值将与另一个操作数进行比较:

1 == 1 // true

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

是:

2 == 1 // false

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

如果数组有多个项目,则强制转换为数字将导致NaN

NaN == 1 // false

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

字符串强制转换为数字值NaN

NaN == 1 // false

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

对象也强制转换为数值NaN

NaN == 1 // false

答案 1 :(得分:0)

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

[]不是布尔值,因为它是一个数组。这就是说空数组是布尔值true。它不是 - 它是一个空数组。

if([]){}将其评估为已定义且不为null。

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

答案 2 :(得分:0)