【问题标题】:Is there any benefit of checking typeof a === "undefined" instead of a === undefined? [duplicate]检查 typeof a === "undefined" 而不是 a === undefined 有什么好处吗? [复制]
【发布时间】:2017-06-09 06:48:38
【问题描述】:

我一直在使用typeof 运算符来检查变量是否未像这样定义:

if( typeof numLines === "undefined" ){
  // do something
}

但同样可以使用:

if( numLines === undefined ){
  // do something
}

据我所知,我曾在某处读到 typeof 方法更好,但现在我想如果没有任何好处,我为什么要使用稍长的语句。所以我的问题是:

  1. 坚持typeof 方法进行此类检查真的有什么好处吗?
  2. 您能否提供一些示例,说明一种方法优于另一种方法?

谢谢。

【问题讨论】:

  • "undefined" 是一个字符串。而 undefined 不是

标签: javascript


【解决方案1】:

根据related question undefined 不能保证是你所期望的:

var undefined = 'uh oh'

if (numLines === undefined) {
  // Seems safe but isn't
}
else if (typeof(numlines) == 'undefined') {
  // Actually gets it.
}

很奇怪,undefined 没有在 JavaScript 中明确,但在 ECMA 标准中就是这样。

【讨论】:

  • @AlexanderO'Mara 我不确定这是否解决了问题。这似乎是一种澄清。
  • 从 ES5.1 开始,现在只能使用变量阴影:ecma-international.org/ecma-262/5.1/#sec-15.1.1.3(全局 undefined 是不可变的)
  • 希望有人在某处请求 JavaScript 中的 defined() 函数。在那之前,有理由使用下划线之类的东西。
  • 嗯,函数名可能只是被遮住了。然后同样的阴影问题也适用。
  • 拥有一个可靠的默认值会是一个不错的选择,但现代 JavaScript 似乎并非如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2017-06-04
  • 2019-08-13
相关资源
最近更新 更多