以下打印'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)
为什么
[] == 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)
但只是
[]评估为真?
因为任何物体都是真实的.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |