未定义的对象属性不等于`undefined`

时间:2015-09-13 22:46:58

标签: javascript

我发现未定义的对象属性不等于undefined

if (obj.unexistingProperty === undefined) {
  // condition is false
}

if (typeof obj.unexistingProperty === 'undefined') {
  // condition is true
}

虽然调试器控制台(Firebug和Chrome开发工具)认为两种情况都是正确的。

对此有何解释?

事实证明,代码发生在

之内
function (undefined) {
  ...
}

在本地范围内隐藏了undefined

1 个答案:

答案 0 :(得分:1)

碰巧,undefined不是像null那样的关键字 - undefined,在ECMAScript 5之前,可以重新定义为其他内容。如果您错误地将其设置为其他内容,例如数字5,那么测试实际未定义的内容以确保相等,您很明显会以false结束。另一方面,typeof忽略本地绑定。

如果您可以避免重新定义undefined,那将是最好的。你可以做的其他事情是测试void 0的相等性(void接受一个表达式,丢弃它的值,然后返回真实的undefined),或者,根据提示问题,使用{{ 1}}来检查typeof