
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
124
|
Chapter 5: Operators
When the operands have disparate datatypes, the interpreter performs a type conver-
sion before performing the comparison. Here are the rules the interpreter follows:
1. If both operands are of the same type, compare them and return the result. (If
null is compared to undefined, true is returned.)
2. If one operand is a number and the other operand is a string, convert the string
to a number and go back to step 1.
3. If one operand is a Boolean, convert the Boolean to a number (
true =1,false =
0) and go back to step 1.
4. If one operand is an object, invoke the valueOf() method of the object to con-
vert it to a primitive type. Return
false if this is not possible. Otherwise, go back
to step 1.
5. Return
false if the previous steps don’t obtain a valid result.
Note that if one operand is an object and the other is a Boolean, the Boolean will be
converted to a number and compared to the primitive value of the object. This
means that
someObject = = true is normally false, even if someObject exists, because
someObject is converted to a number or a string for the comparison, while true is
converted to the number 1. To force
someObject to be treated as a Boolean in a com-
parison, use the Boolean() function, like this:
Boolean(someObject) = = true // Returns true if someObject ...