Javascript检查对象属性是否存在,即使对象未定义

Don*_*n P 3 javascript oop underscore.js

我想检查一个对象是否存在,并且有一个属性.目前我收到"myObject is undefined"错误,停止检查.

即使myObject可能不存在,如何使以下内容仍能正常工作?

if (myObject.myProperty) {
  ...
} else {
  ...
}
Run Code Online (Sandbox Code Playgroud)

我试图甚至检查对象/变量是否存在但是收到错误:

if (foo) { console.log('hello'); }给出错误Uncaught ReferenceError:foo未定义.这是一个jsfiddle http://jsfiddle.net/cfUss/

Aln*_*tak 8

您可以使用"短路" &&操作符:

if (myObject && myObject.myProperty) { 
    ...
}
Run Code Online (Sandbox Code Playgroud)

如果myObject是"falsey"(例如,未定义),则&&操作员将不会费心去尝试评估右手表达式,从而避免尝试引用不存在的对象的属性.

变量myObject必须已经声明了,上面的测试是针对它是否已经分配了一个定义的值.


小智 6

您可以使用可选的链接运算?.来保持简洁:

if (myObject?.myProperty) { ... }
Run Code Online (Sandbox Code Playgroud)

这等于更详细一点

if (myObject && myObject.myProperty) { ... }
Run Code Online (Sandbox Code Playgroud)

它非常方便,特别是对于深度嵌套的对象。

目前(2019 年 9 月)是ECMAScript 第 3 阶段提案,但看起来很有希望该功能将正式可用。目前,您已经可以通过相应的 Babel 插件开始使用它:https ://babeljs.io/docs/en/babel-plugin-proposal-optional-chaining