尝试在javascript中检查而不是类型?

尝试在javascript中检查而不是类型?,javascript,typechecking,Javascript,Typechecking,在python中,我经常听说,与其检查变量的类型以确定是否要对其执行某个操作,不如将该操作包装在Try语句中,并在输入类型错误时处理异常 javascript也是这样吗?i、 e.是否应该优先使用try/catch方法而不是typeof?无论在任何语言中异常处理是多么轻量级,经验法则是始终使用异常来检查异常情况 我的意思是,如果您的算法在正常操作中需要类型检查,那么最好使用条件显式检查类型,如果类型检查是为了检测异常操作,那么最好引发/处理异常 尽管如此,由于Javascript是松散类型的,大

在python中,我经常听说,与其检查变量的类型以确定是否要对其执行某个操作,不如将该操作包装在Try语句中,并在输入类型错误时处理异常


javascript也是这样吗?i、 e.是否应该优先使用try/catch方法而不是typeof?

无论在任何语言中异常处理是多么轻量级,经验法则是始终使用异常来检查异常情况

我的意思是,如果您的算法在正常操作中需要类型检查,那么最好使用条件显式检查类型,如果类型检查是为了检测异常操作,那么最好引发/处理异常


尽管如此,由于Javascript是松散类型的,大多数情况下,键入问题不会引发异常,而是以一种您并不总是期望的方式工作…

大多数情况下,Javascript只是尝试将其转换为正确的类型,因为它是松散类型的,所以大多数操作都会成功,只是不是你想象的那样。try/catch块对性能有很大的影响,所以你应该尽可能避免使用它们。@Pumbaa80这是荒谬的,也是非常糟糕的建议。除非事实证明这是一个性能瓶颈,否则你不应该避免某些事情。使用正确的工具来做这项工作,如果它真的成为问题,那么就找到一个更有效的解决方案。@ MaGar,是的,让我这样说:当你考虑用一种更干净的方式来完成尝试/捕获结构的滥用时,你应该记住尝试/catch的性能很差。谢谢,这很有帮助。我有一些函数调用(主要是数据库查询),在正常操作中有时返回未定义的,所以这些不是例外情况。我现在已经习惯了使用像
myVar=myDbCall()| | defaultValue
if(!!myVar){myFunction}
这样的东西,这似乎是在js中做这些事情的idomatic方法。(!!myVar)是不必要的,因为if语句做了!!自动操作。@Derek,很有趣,我不知道,你能提供一个消息来源吗?@zmo我不能给你一个消息来源。。if语句的基本行为是在其为真时执行某些操作,因此它将始终采用if语句中解析的任何内容的布尔值。你们在用这个做什么!!语句正在返回布尔值。