JavaScript 中的存在运算符?

Ale*_*xis 4 javascript existential-operator

我有一个很大的 json 对象。我需要访问x = a.b.c.d.e.f.g. 但是b(或c, d, e...) 可以是未定义的。这个数据结构是从其他地方导入的。

有没有一种方法,试图让分配xnullundefined没有引发错误?

Bam*_*ieh 6

更新

可选链现在是 ECMAScript 规范的一部分,可用于大多数 javascript 客户端(浏览器、node.js 等)

x = a.b?.c?.d?.e?.f?.g
Run Code Online (Sandbox Code Playgroud)

要在访问失败时使用默认值,您可以使用Nullish 合并运算符 (??)

x = a.b?.c?.d?.e?.f?.g ?? 'my default value'
Run Code Online (Sandbox Code Playgroud)

原始答案(2017)

最简单的方法是使用 try catch

try {
  x = a.b.c.d.e.f.g
} catch(e) {
  x = undefined;
}
Run Code Online (Sandbox Code Playgroud)

有一个叫做optional chaining你可以在这里查看的提案:https : //github.com/tc39/proposal-optional-chaining

x = a.b?.c?.d?.e?.f?.g
Run Code Online (Sandbox Code Playgroud)

如果您使用的是转译器,您将能够使用它,但是它仍处于非常早期的阶段并且可能不被规范所接受