如何在 JavaScript 中处理“未定义”[重复]

Posted

技术标签:

【中文标题】如何在 JavaScript 中处理“未定义”[重复]【英文标题】:How to handle 'undefined' in JavaScript [duplicate] 【发布时间】:2010-12-31 09:08:05 【问题描述】:

可能重复: Detecting an undefined object property in javascript

从下面的 JavaScript 示例中,

try 
    if(jsVar) 
        proceed();
    

catch(e) 
    alert(e);

这个 jsVar 在另一个文件中声明和初始化。

问题在于,如果在执行其他文件(声明和初始化的文件)之前执行此代码,则代码会引发未定义的错误。这就是为什么它被 try and catch 所包围。

处理这个未定义错误的最佳方法是什么而不是 try catch?

【问题讨论】:

我不明白,为什么即使标记为重复,这个问题仍然得到 48 票。是不是缺乏判断力并降低了这些赞成票的质量。如果重复的问题获得投票,那么投票可能会中断。 【参考方案1】:

你可以用

检查事实
if (typeof jsVar == 'undefined') 
  ...

【讨论】:

这比“我的”方式有什么优势吗? 可能会报错:jsVar is not defined。你应该这样测试它:if (window.jsVar !== undefined) 。似乎 typeof() “捕获”了这个错误。 @Fabien: 或者也许使用 if("jsVar" in window)... 但我会避免需要针对这种错误情况进行编码的代码。 @logic-unit 理论上更好,但== 足以与typeof 进行比较,因为只有few possible values 可以返回。 您可以使用typeof来确定未计算的操作数的类型。它将返回字符串中操作数的类型。如果您知道它们是相等的值和相等的类型,您可以使用“===”。【参考方案2】:

与 JavaScript 的常见情况一样,有多种方法可以做到这一点:

typeof foo !== 'undefined'
window.foo !== undefined
'foo' in window

前两个应该是等价的(只要foo 没有被局部变量遮蔽),而最后一个将返回true 如果全局变量已定义但未初始化(或显式设置为undefined)。

【讨论】:

hmm 'foo' in windows 似乎返回 false 即使 foo 是为我定义的,实际上只有 typeof 似乎在我的情况下工作【参考方案3】:

在 JavaScript 中,以下值将导致 if 条件失败并且不执行其语句:null、undefined、false、NaN、数字 0 和空字符串 ''。

假设变量 jsVar 是一个布尔值,我们想在 jsVar 为真时调用proceed()方法,我们可以做如下检查。

if (jsVar && jsVar == true)
    proceed();

上面的代码sn -p首先检查jsVar是否已经定义,然后检查它的值是否为真。 if 条件只有两个条件都满足才会满足。

如果 jsVar 不是布尔值,那么我们可以用适当的检查代替上面代码中的 jsVar == true。

【讨论】:

请记住,这不会检查布尔值 true,因为您没有使用严格比较(在 JS 中,例如 '1' == true 是真的!);如果尚未定义变量,这仍然会引发引用错误,即您的代码没有解决 Madhu 的问题 @Christoph 你是对的!

以上是关于如何在 JavaScript 中处理“未定义”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

求助如何在 flask 中访问未定义的 url 时重定向到其他页面

如何在javascript中检查未定义的类型[重复]

在 JavaScript [重复] 中引用未定义变量时如何避免错误

如何在 JavaScript 中检查空/未定义/空字符串?

如何在 JavaScript 中检查空/未定义/空字符串?

在外部 JavaScript 库中定义函数时如何检查未定义? (Angular4/5)