尝试从Javascript中的undefined中检索值会引发TypeError异常。我正在读一本书,说你可以通过&&&运营商。但是,它并没有说明为什么我要压制错误。有人可以解释为什么那会有用吗?
答案 0 :(得分:1)
当发生TypeError时,抛出异常并且该代码分支停止执行(如果未处理异常)。这通常是一种不受欢迎的情况。
因此,可以编写代码,在尝试访问对象之前检查对象是否有效。根据您检查的内容,有几种不同的方法来构造这种类型的代码。
例如,如果您有一个对象并且想要读取它上面的属性并且您不确定该对象是否有效,那么您可以这样做:
function speak(obj) {
if (obj) {
console.log(obj.greeting);
}
}
无论obj
是否有效,这种代码都是安全的。如果您取出if (obj)
检查,那么如果obj
不是有效对象,此代码将抛出异常并停止执行。
另一方面,如果obj
应始终是一个有效的对象,并且您希望程序在obj
不是有效对象的情况下以可见异常停止执行,那么您可以不使用if
检查并确保您对程序进行充分测试,以确保obj
在使用之前始终有效。在我写的代码中,我是否检查这样的参数通常取决于我是否控制传递给函数的内容或者是否有其他人控制它。如果我处于控制之中,那么我知道obj
是否有效或我是否需要测试其有效性。如果其他人处于控制之中,那么我不知道obj
是否始终有效,因此可能需要对其进行测试。
一些图书馆选择的中间立场是提供"调试"模式使得计划外错误非常明显(日志记录)和生产"尝试在不停止执行的情况下尽可能保持最佳状态的模式。调试模式或生产模式中明显不同的行为也可能是问题的根源,因此也必须小心。