Why does "true" == true show false in JavaScript?
MDC describes the == operator as follows:
If the two operands are not of the same type, JavaScript converts the operands then applies strict comparison. If either operand is a number or a boolean, the operands are converted to numbers if possible; else if either operand is a string, the other operand is converted to a string if possible.
With this in mind, I would evaluate "true" == true as follows:
isNaN(Number("true")) // true ) String(true) === "true" // true ) I've ended up with the strings "true" and "true" , which should evaluate to true , but JavaScript shows false.
What have I missed?
Because "true" is converted to NaN , while true is converted to 1 . So they differ.
Like you reported, both are converted to numbers, because at least true can be (see Erik Reppen's comment), and then compared.
== comparison operator defined in Ecma 5 as
So, "true" == true is interpreted by js engine as
===> false
Acording to The Abstract Equality Comparison Algorithm
http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3
if one of the oprends is a boolean and other is not, boolean is converter to number 0 or 1. so true == "true" is false.
上一篇: JavaScript数组的布尔评估
