== ! //toBoolean   == !true  == false //loose equality round one  //toPrimitive()  "" == false //loose equality round two //toBoolean("")  false === false true
First there is operator precedence so
Now it’s up to loose equalities special behaviour:
If A is an Object ( Arrays are Objects ) and B is a Boolean it will do:
ToPrimitive(A) == B
ToPrimitive(A) attempts to convert its Object argument to a primitive value, by attempting to invoke varying sequences of A.toString and A.valueOf methods on A.
Converting an Array to its primitive is done by calling
toString ( as they don’t have a
valueOfmethod) which is basically
Well empty Strings are
Where did I get it wrong?
At step 1. Negating something does not call