有人可以解释一下为什么 !
和==
搞乱了 []
的类型转换 bool 值:
![] // 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 == bool 值 ([])
如前所述,对象转换为 bool 值时始终为 true,而 0
为 false。 0 == Boolean ([])
-> 0 == true
-> 0 == 1
-> false
6) [] == false
[] == false
-> [] == 0
-> 0 == 0
-> true
7) bool 值([])
对象引用始终为 true。 bool 值([])
-> true
8) [] == Boolean([])
[] == Boolean([])
-> [] == true
-> [] == 1
-> 0 == 1
-> 假
检查this interesting post关于比较和类型转换。
关于Javascript 类型转换悖论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35605858/