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
为什么这样评价?
谢谢
基于抽象等式比较算法,您的第一个代码将被评估如下,
步骤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"