比较时返回false的空数组,但是当它单独返回true时...为什么会这样

时间:2016-03-22 06:53:17

标签: javascript arrays if-statement conditional

if([]==true) //evalutes as false
  

//当我使用true检查空数组时,如果将[]评估为false,那么它   if condition return false

if([]) //evalutes as true
  

//当我单独检查空数组时,如果将[]评估为真,那么就是这样   条件返回true

为什么会这样评估?

感谢

2 个答案:

答案 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因此返回为真。