检测未定义的对象属性正确的代码退化代码。请勿使用。

检查 JavaScript 中的对象属性是否未定义的最佳方法是什么?


答案 1

检查属性的值是否为特殊值的常用方法是:undefined

if(o.myProperty === undefined) {
  alert("myProperty value is the special value `undefined`");
}

要检查对象是否实际上没有这样的属性,因此当您尝试访问它时,默认情况下将返回该对象:undefined

if(!o.hasOwnProperty('myProperty')) {
  alert("myProperty does not exist");
}

要检查与标识符关联的值是否是特殊值,或者该标识符是否尚未声明, 请执行以下操作:undefined

if(typeof myVariable === 'undefined') {
  alert('myVariable is either the special value `undefined`, or it has not been declared');
}

注意:最后一种方法是在没有早期错误的情况下引用未声明标识符的唯一方法,这与值为 .undefined

在 ECMAScript 5 之前的 JavaScript 版本中,全局对象上名为“undefined”的属性是可写的,因此,如果意外地重新定义了简单的检查,则可能会意外地执行检查。在现代 JavaScript 中,该属性是只读的。foo === undefined

但是,在现代JavaScript中,“undefined”不是关键字,因此函数中的变量可以命名为“undefined”并隐藏全局属性。

如果您担心这种(不太可能的)边缘情况,则可以使用 void 运算符来获取特殊值本身:undefined

if(myVariable === void 0) {
  alert("myVariable is the special value `undefined`");
}

答案 2

我认为这个话题有很多不正确的答案。与普遍的看法相反,“undefined”在JavaScript中不是一个关键字,实际上可以为其分配一个值。

正确的代码

执行此测试的最可靠方法是:

if (typeof myVar === "undefined")

这将始终返回正确的结果,甚至处理未声明的情况。myVar

退化代码。请勿使用。

var undefined = false;  // Shockingly, this is completely legal!
if (myVar === undefined) {
    alert("You have been misled. Run away!");
}

此外,在 myVar 未声明的情况下,将引发错误。myVar === undefined