【问题标题】:checking for undefined in javascript-- should I use typeof or not?检查 javascript 中的未定义 - 我应该使用 typeof 还是不使用?
【发布时间】:2013-02-26 16:13:41
【问题描述】:

我有点困惑如何最好地检查一个变量是否在 javascript 中未定义。我一直在这样做:

myVar === undefined;

但是在所有情况下使用 typeof 会更好吗?

typeof myVar === undefined;

我也见过undefined"undefined" 的用法呢?

【问题讨论】:

  • typeof 返回一个字符串,因此如果使用严格比较运算符,则应将其结果与"undefined" 进行比较。
  • 如果您只想知道myVar 是否具有非假值,! 就足够了。 (例如if(!myVar)
  • @Frédéric Hamidi--谢谢你的解释。在大多数情况下,您是否使用(或推荐)使用 typeof?在所有情况下?我之所以问是因为我在知名书籍中看到过myVar === undefined,这就是我一直在使用它的原因。
  • @larryq,myVar === undefinedtypeof myVar === "undefined" 不同。如果myVar 在当前范围内不存在,第一种语法将引发异常。查看完整故事的潜在副本。
  • 不是 'typeof === "undefined" vs. != null'的副本。相似之处是表面的。各位,请在投票之前仔细阅读。

标签: javascript undefined


【解决方案1】:

这是最好的检查方法——完全万无一失:

typeof myVar === "undefined"

这没问题,但如果有人无济于事地覆盖了全局 undefined 值,它可能会失败:

myVar === undefined;

不得不说,ECMAScript 5 规定 undefined 是只读的,所以上面的在任何符合的浏览器中总是安全的。

这永远不会起作用,因为它最终会比较 "undefined" === undefined(不同类型):

typeof myVar === undefined;

【讨论】:

  • 为什么这是一个公认的答案? AFAIK,尝试访问未定义的内存空间总是会在 ES5 和 ES6 中引发 ReferenceError:jsfiddle.net/Troop4Christ/on2oynvzes6fiddle.net/ijls28o5
  • @RavenHursT:这不是这个问题的重点——尽管理所当然,但问题中给出的示例代码并不是最好的。这更像是here 发生的事情。关于ReferenceError,至少有this question 涵盖了我知道的,因为我在那里也有答案。
【解决方案2】:

此测试将始终按预期工作:

typeof a === 'undefined'

由于undefined 的值可以更改,因此此类测试并不总是可靠的:

a = {}
a.b === undefined

在这些情况下,您可以改为针对 void 0 进行测试:

a.b === void 0
// true

但是,这不适用于单变量测试:

a === void 0 // <-- error: cannot find 'a'

您可以通过测试window.a 来解决这个问题,但应该首选第一种方法。

【讨论】:

    【解决方案3】:

    我相信在最常见的情况下,例如检查参数是否通过函数传递时,myVar === undefined 就足够了,因为 myVar 将始终声明为参数

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      • 2010-10-31
      • 1970-01-01
      • 2013-06-22
      • 2020-12-17
      • 1970-01-01
      相关资源
      最近更新 更多