有人可以解释这一点,为什么!
和==
将[]
的类型转换为布尔值:
![] // false
!0 // true
[] == 0 // true
!0 == ![] // false
同样的悖论:
0 == Boolean ([]) // false
[] == false // true
Boolean([]) // true
[] == Boolean([]) // false
答案 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有关比较和类型转化的信息。