1) ![]
Any object instance (including []
) is a truthy value. ![]
-> !true
-> false
2) !0
0
is falsy value. !0
-> !false
-> true
3) [] == 0
When comparing an object with a primitive value (another number in this case), the object is transformed to a primitive too. [] == 0
-> 0 == 0
-> true
4) !0 == ![]
!0 == ![]
-> !false == ![]
-> true == ![]
-> true == !true
-> true == false
-> false
5) 0 == Boolean ([])
As mentioned, an object when transformed to boolean is always true and 0
is falsy. 0 == Boolean ([])
-> 0 == true
-> 0 == 1
-> false
6) [] == false
[] == false
-> [] == 0
-> 0 == 0
-> true
7) Boolean([])
An object reference is always true. Boolean([])
-> true
8) [] == Boolean([])
[] == Boolean([])
-> [] == true
-> [] == 1
-> 0 == 1
-> false
Check this interesting post about comparison and types conversion.