[] is equal ![]
Array is equal not array:
[] == ![]; // -> true 💡 Explanation:
The abstract equality operator converts both sides to numbers to compare them, and both sides become the number 0 for different reasons. Arrays are truthy, so on the right, the opposite of a truthy value is false, which is then coerced to 0. On the left, however, an empty array is coerced to a number without becoming a boolean first, and empty arrays are coerced to 0, despite being truthy.
Here is how this expression simplifies:
+[] == +![]; 0 == +false; 0 == 0; true; See also [] is truthy, but not true.
true is not equal ![], but not equal [] too
Array is not equal true, but not Array is not equal true too;
Array is equal false, not Array is equal false too:
true == []; // -> false true == ![]; // -> false false == []; // -> true false == ![]; // -> true 💡 Explanation:
true == []; // -> false true == ![]; // -> false // According to the specification true == []; // -> false toNumber(true); // -> 1 toNumber([]); // -> 0 1 == 0; // -> false true == ![]; // -> false ![]; // -> false true == false; // -> false false == []; // -> true false == ![]; // -> true // According to the specification false == []; // -> true toNumber(false); // -> 0 toNumber([]); // -> 0 0 == 0; // -> true false == ![]; // -> true ![]; // -> false false == false; // -> true
Top comments (0)