我发现未定义的对象属性不等于undefined
。
if (obj.unexistingProperty === undefined) {
// condition is false
}
if (typeof obj.unexistingProperty === 'undefined') {
// condition is true
}
虽然调试器控制台(Firebug和Chrome开发工具)认为两种情况都是正确的。
对此有何解释?
事实证明,代码发生在
之内function (undefined) {
...
}
在本地范围内隐藏了undefined
。
答案 0 :(得分:1)
碰巧,undefined
不是像null
那样的关键字 - undefined
,在ECMAScript 5之前,可以重新定义为其他内容。如果您错误地将其设置为其他内容,例如数字5
,那么测试实际未定义的内容以确保相等,您很明显会以false
结束。另一方面,typeof
忽略本地绑定。
如果您可以避免重新定义undefined
,那将是最好的。你可以做的其他事情是测试void 0
的相等性(void
接受一个表达式,丢弃它的值,然后返回真实的undefined
),或者,根据提示问题,使用{{ 1}}来检查typeof
。