为啥 [] == ![] 呢?
明确几点:
1)! 的优先级高于 == 号
2)在使用 == 号的时候,如果有一方为bool值则bool值先转化为 0 || 1 进行比较
分析:从优先级高的一方开始
右边进行显示转换 !Boolean([]) => ! true => false
式子变为: [] == false => [] == 0
左边进行转换 Number([]) => 0
式子变为: 0 == 0
结果返回的当然是true
下面是类型转换表
原始值 | 转化为数值类型 | 转化为字符串类型 | 转化为 Boolean 类型 |
---|---|---|---|
false | 0 | “false” | false |
true | 1 | “true” | true |
0 | 0 | “0” | false |
1 | 1 | “1” | true |
“0” | 0 | “0” | true |
“1” | 1 | “1” | true |
NaN | NaN | “NaN” | false |
Infinity | Infinity | “Infinity” | true |
-Infinity | -Infinity | “-Infinity” | true |
“” | 0 | “” | false |
“20” | 20 | “20” | true |
“twenty” | NaN | “twenty” | true |
[ ] | 0 | “” | true |
[20] | 20 | “20” | true |
[10,20] | NaN | “10,20” | true |
[“twenty”] | NaN | “twenty” | true |
[“ten”,”twenty”] | NaN | “ten,twenty” | true |
function(){} | NaN | “function(){}” | true |
{ } | NaN | “[object Object]” | true |
null | 0 | “null” | false |
undefined | NaN | “undefined” | false |
版权声明:本文为qq_39846450原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。