为啥 [] == ![] 呢?
明确几点:
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 版权协议,转载请附上原文出处链接和本声明。