Best and/or shortest way to do strict (non-type converting) <, >, <=, >= comparison in Javascript
javascript
Solution
There are no built-in operators for what you want, but you can always create your own functions. For example, for `<`:
function lt(o1, o2) {
return ((typeof o1 === typeof o2) && (o1 < o2));
}
lt("10", 11); // false
Another option, if you're only dealing with strings and numbers, is extending `String.prototype` and `Number.prototype`:
function lt(o) {
return ((typeof this.valueOf() === typeof o) && (this < o));
}
String.prototype.lt = lt;
Number.prototype.lt = lt;
"10".lt(11); // false
(11).lt("12"); // false
Problem
In Javascript, the `==` comparison has a strict (non-type converting) version: `===`. Likewise, `!=` has the strict form `!==`. These protect you from the following craziness: ``` var s1 = "1", i1 = 1, i2 = 2; (s1 == i1) // true, type conversion (s1 != i1) // false, type conversion (s1 === i1) // false, no type conversion (s1 !== i1) // true, no type conversion ``` However, the other comparison operators have no equivalent strict modes: ``` (s1 < i2) // true, type conversion (s1 <= i2) // true, type conversion ([] < i2) // true, wait ... wat!? ``` The obvious solution seems pretty verbose: ``` ((typeof s1 === typeof i2) && (s1 < i2)) // false ``` Is there a more idiomatic (or just less verbose) way to do this in Javascript? Reference: MDN Comparison Operators