Javascript类型悖论

时间:2016-02-24 15:14:38

标签: javascript

有人可以解释这一点,为什么!==[]的类型转换为布尔值:

![] // false

!0 // true

[] == 0 // true

!0 == ![] // false
同样的悖论:

0 == Boolean ([]) // false

[] == false // true

Boolean([]) // true

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

1 个答案:

答案 0 :(得分:3)

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 ([])
如上所述,转换为布尔值时的对象始终为true,0为假。 0 == Boolean ([]) - > 0 == true - > 0 == 1 - > false

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

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

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

检查this interesting post有关比较和类型转化的信息。