如何检查 JavaScript 中的对象属性是否未定义?
原文由 Matt Sheppard 发布,翻译遵循 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 许可协议
10 回答11.4k 阅读
4 回答3.2k 阅读✓ 已解决
2 回答2.9k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
2 回答2k 阅读✓ 已解决
检查属性值是否为特殊值
undefined
的常用方法是:要检查一个对象是否实际上没有这样的属性,因此当您尝试访问它时默认返回
undefined
:要检查与标识符关联的值是否是特殊值
undefined
, 或者 该标识符是否尚未声明:注意:这最后一种方法是引用 未声明 标识符而没有早期错误的唯一方法,这与具有
undefined
值不同。在 ECMAScript 5 之前的 JavaScript 版本中,全局对象上名为“undefined”的属性是可写的,因此如果不小心重新定义了一个简单的检查
foo === undefined
,它可能会出现意外行为。在现代 JavaScript 中,该属性是只读的。但是,在现代 JavaScript 中,“未定义”不是关键字,因此函数内部的变量可以命名为“未定义”并隐藏全局属性。
如果您担心这种(不太可能的)边缘情况,您可以使用 void 运算符 来获取特殊的
undefined
值本身: