if([]==true) //evalutes as false
//当我使用true检查空数组时,如果将[]评估为false,那么它 if condition return false
if([]) //evalutes as true
//当我单独检查空数组时,如果将[]评估为真,那么就是这样 条件返回true
为什么会这样评估?
感谢
答案 0 :(得分:5)
根据abstract equality comparison algorithm,您的第一个代码将按如下方式评估,
第1步:ToNumber([]) == true
第2步:ToPrimitive([]) == true
(ToNumber()
会在传递的参数为ToPrimitve()
时调用object
第3步:"" == true
第4步:0 == true
第5步:false == true
第6步:false
在第二种情况下,[]
是一个真值,因此if([])
将始终被评估为真,此处[]
将不会转换为基元。当您使用==
运算符时,抽象等式比较算法会发挥作用。
另一个更好的例子是,
var x = [] || "hello";
console.log(x); // []
由于[]
是真值,x
将设置为[]
而不是"hello"
答案 1 :(得分:0)
当您仅使用变量作为条件(没有比较运算符)时,Javascript会使用Boolean
函数将其强制转换为Boolean()
:
http://www.w3schools.com/js/js_booleans.asp
在您的情况下,Boolean([]) = true
因此返回为真。