【发布时间】:2016-07-08 22:58:18
【问题描述】:
if([]==true) //evalutes as false
//当我用真检查空数组时,如果评估 [] 为假,那么它 如果条件返回false
if([]) //evalutes as true
//当我单独检查空数组时,如果评估 [] 为真,那么如果 条件返回真
为什么会这样评价?
谢谢
【问题讨论】:
标签: javascript arrays if-statement conditional
if([]==true) //evalutes as false
//当我用真检查空数组时,如果评估 [] 为假,那么它 如果条件返回false
if([]) //evalutes as true
//当我单独检查空数组时,如果评估 [] 为真,那么如果 条件返回真
为什么会这样评价?
谢谢
【问题讨论】:
标签: javascript arrays if-statement conditional
基于abstract equality comparison algorithm,您的第一个代码将按如下方式进行评估,
第 1 步:ToNumber([]) == true
第二步:ToPrimitive([]) == true
(当传递的参数是 object 时,ToNumber() 将调用 ToPrimitve())
第 3 步:"" == true
第 4 步:0 == true
第 5 步:false == true
第 6 步:false
在第二种情况下,[] 是一个真值,因此if([]) 将始终被评估为真,这里[] 不会被转换为原语。当您使用== 运算符时,抽象的相等比较算法就会发挥作用。
另一个更好的例子是,
var x = [] || "hello";
console.log(x); // []
由于[] 是一个真实值,x 将设置为[] 而不是"hello"
【讨论】:
当您仅使用变量作为条件时(不使用比较运算符),Javascript 将使用 Boolean() 函数将其转换为 Boolean:
http://www.w3schools.com/js/js_booleans.asp
在你的情况下,Boolean([]) = true 所以它返回为真。
【讨论】: