JavaScript中是否有类型安全的比较操作符等价物

Are there type-safe equivalents to the comparison operators in JavaScript?

本文关键字:比较 操作符 等价物 类型安全 是否 JavaScript      更新时间:2023-09-26

我刚刚在node.js控制台尝试了以下操作:

> 5 <= "5"
true

这意味着<==部分的处理方式与==相同,而不是===。这让我立即尝试<==,希望它能做到你所希望的。但它并不存在。

然后我尝试了以下操作:

> 5 < "6"
true

然后我开始观察更奇怪的行为:

> 5 < [6]
true

这带来了一个更重要的问题:是否存在与<, >, <=>=类型安全的等价物?

,但可以通过正确使用现有语言功能进行类型检查来处理。

比较是理想的双状态逻辑。要么a<b,要么不是。问题是,将类型检查与比较相结合会将两种状态逻辑变为三种状态(真/假/不可比较)。返回三个结果中的一个将不再是一个简单的布尔值。

对类型的预检查已经可以通过typeofinstanceOf实现

如果比较必须是类型适当的,并且没有编写处理不匹配的代码,则可以抛出错误以停止执行,如下例所示:

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();
}

以后出现错误处理代码时,可以替换throw或保留throw并使用try/catch

不,没有内置的东西可以这样做。

考虑:

// I invented ~ as the non type coercion operator
5 <~ 6
5 <~ '6'

两者都返回false,但返回值实际上并不表示相同的东西。在第二种情况下,它甚至可能不会比较值。