检测未定义的对象属性

新手上路,请多包涵

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

原文由 Matt Sheppard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 844
2 个回答

检查属性值是否为特殊值 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 中,“未定义”不是关键字,因此函数内部的变量可以命名为“未定义”并隐藏全局属性。

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

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

原文由 Erwin 发布,翻译遵循 CC BY-SA 4.0 许可协议

我相信这个话题有很多不正确的答案。与普遍看法相反,“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 的情况下引发错误。

原文由 MarkPflug 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题