Javascript类型转换悖论

Javascript typecast paradox

本文关键字:类型转换 Javascript      更新时间:2023-09-26

有人可以解释一下,为什么!==弄乱了布尔[]的类型转换:

![] // false
!0 // true
[] == 0 // true
!0 == ![] // false

同样的悖论:

0 == Boolean ([]) // false
[] == false // true
Boolean([]) // true
[] == Boolean([]) // false

1) ![]
任何对象实例(包括[])都是真值。 ![] -> !true -> false

2) !0
0是虚假值。 !0 -> !false -> true

3) [] == 0
将对象与基元值(在本例中为另一个数字)进行比较时,该对象也会转换为基元。 [] == 0 -> 0 == 0 -> true

4) !0 == ![]
!0 == ![] -> !false == ![] -> true == ![] -> true == !true -> true == false -> false

5) 0 == Boolean ([])
如前所述,一个对象在转换为布尔值时总是为真,0是假的。 0 == Boolean ([]) -> 0 == true -> 0 == 1 -> false

6) [] == false
[] == false -> [] == 0 -> 0 == 0 -> true

7) Boolean([])
对象引用始终为真。 Boolean([]) -> true

8) [] == Boolean([])
[] == Boolean([]) -> [] == true -> [] == 1 -> 0 == 1 -> false

查看这篇关于比较和类型转换的有趣文章。