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

Nag*_*ddy 1 javascript arrays conditional if-statement

if([]==true) //evalutes as false
Run Code Online (Sandbox Code Playgroud)

//当我用true检查空数组时,如果将[]计算为false,那么如果条件返回false则返回false

if([]) //evalutes as true
Run Code Online (Sandbox Code Playgroud)

//当我单独检查空数组时,如果将[]计算为true,那么如果条件返回true则返回true

为什么这样评价?

谢谢

Raj*_*amy 5

基于抽象等式比较算法,您的第一个代码将被评估如下,

步骤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); // [] 
Run Code Online (Sandbox Code Playgroud)

由于[]是一个真值,x将设置为[]没有"hello"

  • 如果y的类型是字符串或数字,则将调用ToPrimitive.这基本上是最后一点10.因为它不满足前9个条件.你给出了规范的正确部分.+1 (2认同)