JavaScript – Understanding Equality Operators

equalityjavascript

In David Flanagan's Javascript guide, there is a statement:

the == operator never attempts to convert its operands to boolean

So here I did a little test:

var a = false;
var b = ""; // empty string
a == b; //returns true

Looking at Abstract Equality Comparison Algorithm there is a point:

e. If Type(x) is Boolean, return true if x and y are both true or both false. Otherwise, return false.

How can x and y be both true if y is string data type (without conversion)?

Best Answer

What happens under the hood is

If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.

Number(false) == ""

followed by

If Type(x) is Number and Type(y) is String, return the result of the comparison x == ToNumber(y).

Number(false) == Number("") -> 0 == 0

How can x and y be both true if y is string data type (without conversion)?

They are not both true, but after type coercion their values are equal.

the == operator never attempts to convert its operands to boolean

And that is correct, if you check the comparison algorithm you will find that types are never implicitly casted to Boolean.

References:

Related Question