Javascript try/catch(try/catch)是防止变量未定义时发生错误的最佳方法之一吗?

Javascript try/catch(try/catch)是防止变量未定义时发生错误的最佳方法之一吗?,javascript,methods,methodology,Javascript,Methods,Methodology,有人警告我,这篇文章可能过于主观,但我只是编程了几个星期,所以我想知道 到目前为止,我一直在JS中使用try/catch语句来防止在函数运行时未定义变量时抛出错误,但这是唯一有效的方法吗?就我个人而言,如果有更简单的解决方案,我会尽量避免使用try/catch语句 在您的例子中,JS和其他语言提供了一种更简单的方法来查看是否定义了变量 if (window.x === undefined) 或者,如果变量是使用var x定义的: if (x === undefined) 如果您在浏览器中,可

有人警告我,这篇文章可能过于主观,但我只是编程了几个星期,所以我想知道


到目前为止,我一直在JS中使用try/catch语句来防止在函数运行时未定义变量时抛出错误,但这是唯一有效的方法吗?

就我个人而言,如果有更简单的解决方案,我会尽量避免使用try/catch语句

在您的例子中,JS和其他语言提供了一种更简单的方法来查看是否定义了变量

if (window.x === undefined)
或者,如果变量是使用var x定义的:

if (x === undefined)

如果您在浏览器中,可以使用
window.foo
测试全局变量。例如:

if (window.foo === undefined)
    console.log("foo is not defined");
如果我在读代码,我更愿意读这个,而不是
尝试{foo}catch{…}


另外,请注意三重相等:这是必要的,因为如果
window.foo
null
,那么
window.foo==undefined
将为true,而
window.foo==undefined
将为false(您想要的)。

在那种情况下,我不会使用try/catch。如果它抱怨某个变量未定义,我会查找错误所在并修复它。

通常,异常会通知应用程序程序员所做的假设未得到满足。例如,网络连接不起作用,文件不存在,安全性不允许某些东西,等等


如果您知道某些变量可能未定义,那么您不应该使用异常,而应该在If中处理它。或者尽可能遵循一种策略来获得有意义的对象或值。

检查变量是否使用if语句定义

实际上,如果变量未定义,那么try-catch是一种非常低效的测试方法。最好的方法是检查变量是否在if语句中定义

if(!someVariable === undefined){
  // Do Logic Here that requires someVariable to be defined
}

要测试是否存在正则变量,最好将类型与未定义的进行比较,例如:

if (typeof(x) != "undefined") {
    // your variable exists
}

最好弄清楚错误发生的原因。然后停止错误的发生。随着代码的增长,您将遇到一大堆麻烦。您可能应该尝试编写代码,以便在使用变量之前确信已定义了变量,但如果不能,那么可能更好的替代方法是检查变量是否存在,如
if(x){}
if(typeof(x)!=“undefined”){}
undefined
是变量的有效值,不会自动出现错误条件。像其他人建议的那样,使用
if
语句。我不知道是否会使用“从不”这个词“,但我要说的是,为此目的使用
try/catch
几乎从来都不是一个好主意。即使撇开执行速度问题(您可能关心,也可能不关心)不谈,
try/catch
也很难融入到您的代码中。当变量不存在时,它仍然会产生错误。所以它没有达到我想要的目的。当变量不存在时,它仍然会产生一个错误。所以它没有达到我想要的目的。当变量不存在时,它仍然会产生一个错误。如果我写
If(cowbell==undefined){alert(“cow”)}
,Firebug会提醒“cowbell未定义”,Firefox不会显示“cow”警报。Safari也有类似的行为。其控制台显示“ReferenceError:找不到变量:cowbell”。这就是为什么我同意乔的建议。到目前为止,无论变量是否存在,它都是执行的版本。这是因为没有定义
cowbell
。但是,如果您使用
window.cowbell
,正如我在回答中所建议的那样,您将得到预期的结果。这是迄今为止发布的唯一一个在变量不存在时不会引发错误的方法。谢谢,乔。