如何在 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 时重定向到其他页面