检测未定义的对象属性

33 浏览
0 Comments

检测未定义的对象属性

如何在JavaScript中检查对象属性是否未定义?

admin 更改状态以发布 2023年5月21日
0
0 Comments

我相信有许多错误的答案关于这个话题。与常见的信念相反, "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 === undefined 在 myVar 未声明的情况下会引发错误。

0
0 Comments

检查属性值是否为特殊值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”的属性是可写的,因此如果意外重新定义了它,简单的检查foo === undefined可能会出现意想不到的行为。在现代JavaScript中,该属性是只读的。

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

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

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

0