Relational Operators are
The relational operators perform comparisons between values.
Each of these operators returns a Boolean value, as in this example:
var result1 = 5 > 3; //true var result2 = 5 < 3; //false
Here is the rules.
|If the operands are numbers|| perform a numeric comparison.|
|If the operands are strings|| compare the character codes of each corresponding character in the string.|
|If one operand is a number|| convert the other operand to a number and perform a numeric comparison.|
|If an operand is an object|| call valueOf() and use its result to perform the comparison according to the previous rules.|
If valueOf() is not available, call toString() and use that value according to the previous rules.
|If an operand is a Boolean|| convert it to a number and perform the comparison.|
For strings, characters are compared numerically compared.
The character codes of uppercase letters are all lower than the character codes of lowercase letters:
var result = "Black" < "abc"; //true
"Black" is less than the string "abc", because the letter B has a character code of 66 and the letter a has a character code of 97.
To force a true alphabetic result, convert both operands into a common case and then compare like this:
var result = "Black".toLowerCase() < "abc".toLowerCase(); //false
Consider the following:
var result = "23" < "3"; //true
This code returns true because both operands are strings, they are compared by their character codes.
The character code for "2" is 50; the character code for "3" is 51.
If one of the operands is changed to a number, the result makes more sense:
var result = "23" < 3; //false
"23" is converted into the number 23 and then compared to 3.
Whenever a number is compared to a string, the string is converted into a number and then numerically compared to the other number.
Consider this example:
var result = "a" < 3; //false because "a" becomes NaN
The letter "a" can't be meaningfully converted into a number, so it becomes NaN.
The result of any relational operation with NaN is false, which is interesting when considering the following:
var result1 = NaN < 3; //false var result2 = NaN >= 3; //false