为什么`[] == false`为真,但只有`[]`的计算结果为真?

App*_*rew 7 javascript

以下打印'A'按预期方式,因为数据类型不同,因此数组被哄骗为原始形式,false用于空数组.

if ([] == false)
    console.log('A');
else
    console.log('B');
Run Code Online (Sandbox Code Playgroud)

但是为什么以下代码也打印'A'?

if ([])
    console.log('A');
else
    console.log('B');
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 7

为什么[] == false是真的

因为与原始值相比,数组的行为很奇怪.

特别是,当您任何非布尔值与布尔值进行比较时,布尔值将作为数字处理.然后,当您将一个数字与一个对象进行比较时,该对象将转换为一个原语 - 在将该数组与该数字进行比较之前对该数组进行字符串化.现在,该字符串将转换为数字,以便可以进行比较:

[] == false
[] == 0
"" == 0
0 == 0
Run Code Online (Sandbox Code Playgroud)

同样,你可以试试

[1] == true
[1] == 1
"1" == 1
1 == 1
Run Code Online (Sandbox Code Playgroud)

要么

[2] == true
[2] == 1
"2" == 1
2 == 1
Run Code Online (Sandbox Code Playgroud)

但只是[]评估为真?

因为任何物体都是真实的.