JavaScript中的比较运算符是否存在类型安全的等价物?

时间:2014-05-28 01:58:07

标签: javascript

我刚刚在node.js控制台中尝试了以下内容:

> 5 <= "5"
true

这意味着=的{​​{1}}部分的处理方式与<=相同,而不是==。这使我立即尝试===希望它会做你希望的那样。但它并不存在。

然后我尝试了以下内容:

<==

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

> 5 < "6"
true

这提出了一个更重要的问题:> 5 < [6] true <><=是否存在类型安全的等价物?

2 个答案:

答案 0 :(得分:8)

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

理想情况下,比较是两种状态逻辑。 a<b或不是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(); } 。问题是将类型检查与比较相结合将两个状态逻辑改变为三个状态(真/假/无比)。要返回三个结果中的一个,将不再是一个简单的布尔值。

可以使用typeofinstanceOf

实施预先检查类型

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

{{1}}

稍后当有错误处理代码时,你可以替换throw或保持throw并使用try / catch。

答案 1 :(得分:1)

不,没有内置任何东西。

考虑:

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

这两个都返回错误,但返回值并非真正意味着同样的事情。在第二种情况下,它甚至可能无法比较这些值。