我刚刚在node.js控制台中尝试了以下内容:
> 5 <= "5"
true
Run Code Online (Sandbox Code Playgroud)
这意味着被处理的=部分<=是相同==的,而不是===.这使我立即尝试<==希望它会做你希望它会做的事情.但它不存在.
然后我尝试了以下内容:
> 5 < "6"
true
Run Code Online (Sandbox Code Playgroud)
然后我开始观察甚至更奇怪的行为:
> 5 < [6]
true
Run Code Online (Sandbox Code Playgroud)
这带来了一个更重要的问题:有没有类型安全的等价物<,>,<=,和>=?
不,但可以通过正确使用现有语言功能来进行类型检查来处理.
理想情况下,比较是两种状态逻辑.要么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(); }
Run Code Online (Sandbox Code Playgroud)
稍后当出现错误处理代码时,您可以替换throw或保持throw并使用try/catch.
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |