I just tried the following in a node.js console:
> 5 <= "5"
true
Which means that the =
part of the <=
is treated the same way ==
is, not ===
. Which made me immediately try <==
hoping it would do what you would hope it would. But it doesn't exist.
Then I tried the following:
> 5 < "6"
true
Then I started to observe even stranger behaviour:
> 5 < [6]
true
Which brings up a more important question: are there type-safe equivalents to <
, >
, <=
, and >=
?
No, but it can be handled by correct use of existing language features to type check.
Comparison is ideally two state logic. Either a<b
or it is not. The problem is that combining type checking with comparison changes two state logic into three state (true/false/incomparable). To return one of three outcomes would no longer be a simple Boolean.
A pre-check on types can already be implemented with typeof
or instanceOf
If comparisons must be type-appropriate, and there is no code written to deal with mismatches, then an error can be thrown to stop execution as in the following example:
if (typeof(a) !== typeof(b)) {
throw `type mismatch in some_function(), types: ${typeof(a)}, ${typeof(b)}`;
}
// now the next operation is "safe"
if (a <= b) {
do_something();
} else {
do_the_other_thing();
}
Later when there is error handling code, you can replace the throw or keep the throw and use try/catch.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With