I\'m learning about ==
vs. ===
and came across this answer which was very helpful in understanding the concept. However I wondered about one of the
To make things more confusing for totally new in programming world:
Boolean('false')
true
Boolean('true')
true
I think it is easier and more intuitive to use !!
operator for some reason. I dont know if i make sense, but i never used Boolean()
Answering the question, i found that thread useful: Difference between == and === in JavaScript
"0"
is a string containing the character 0, it is not the numeric value 0
. The only string-type value which evaluates to false
is ""
.
"0"
is truthy.
Section 9.2 of the ECMAScript 262 specification defines how different types are converted to Boolean:
Argument Type Result
Undefined false
Null false
Boolean The result equals the input argument (no conversion).
Number The result is false if the argument is +0, −0, or NaN; otherwise the
result is true.
String The result is false if the argument is the empty String (its length is
zero); otherwise the result is true.
Object true
This, however, is only strictly followed when comparing using ===
.
When using Boolean('0')
you're converting the value '0'
to Boolean (which is the same as using !!'0'
). When loosely comparing '0'
with false
, the Boolean value is converted to a number (as defined here). false
, when converted to a number, becomes 0
. This means the final calculation is '0' == 0
which equates to true
.
To summarise the relevant part of the linked section of the ECMAScript specification above:
'0'
and y = false
.In our case, a JavaScript implementation of this would be:
var x = '0', // x = "0"
y = false; // y = false
if (typeof y === "boolean") {
y = +y; // y = 0
}
console.log( x == y ); // "0" == 0
-> true