JavaScript中是否有类型安全的比较操作符等价物
Are there type-safe equivalents to the comparison operators in JavaScript?
我刚刚在node.js控制台尝试了以下操作:
> 5 <= "5"
true
这意味着<=
的=
部分的处理方式与==
相同,而不是===
。这让我立即尝试<==
,希望它能做到你所希望的。但它并不存在。
然后我尝试了以下操作:
> 5 < "6"
true
然后我开始观察更奇怪的行为:
> 5 < [6]
true
这带来了一个更重要的问题:是否存在与<
, >
, <=
和>=
类型安全的等价物?
不,但可以通过正确使用现有语言功能进行类型检查来处理。
比较是理想的双状态逻辑。要么a<b
,要么不是。问题是,将类型检查与比较相结合会将两种状态逻辑变为三种状态(真/假/不可比较)。返回三个结果中的一个将不再是一个简单的布尔值。
对类型的预检查已经可以通过typeof
或instanceOf
实现
如果比较必须是类型适当的,并且没有编写处理不匹配的代码,则可以抛出错误以停止执行,如下例所示:
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,但返回值实际上并不表示相同的东西。在第二种情况下,它甚至可能不会比较值。
相关文章:
- 比较从函数和生成的日期对象
- 如何使用 node.js 比较两个 json 数组
- jQuery自定义验证比较多个输入的序列
- 反向字符串比较
- 通过JSON&比较时间
- 将DOM节点值与字符串Javascript进行比较
- 从键值结构中获取数据,并将其与AngularJS中ng重复的值进行比较
- 递归深度比较
- 可以't在JavaScript中比较两个字符串
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- 如何在moment.js中只比较日期
- 无法比较javascript变量
- 比较javascript中的浮动并更改最高浮动的颜色
- 使用javascript比较对象中的对象值和数组长度
- Javascript操作符不能比较整数和零(例如:10、100、1000等)
- Javascript数字比较操作符是如何处理字符串的
- 操作符<或比;比较两个字符串时工作
- JavaScript中是否有类型安全的比较操作符等价物
- Javascript '>'操作符用空格比较字符
- & # 39;上# 39;JavaScript中的操作符.字符串比较