JavaScript中的存在运算符? [复制]

Posted

技术标签:

【中文标题】JavaScript中的存在运算符? [复制]【英文标题】:Existential operator in JavaScript? [duplicate] 【发布时间】:2018-02-09 21:03:15 【问题描述】:

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

有没有办法尝试将x 分配给nullundefined 而不会引发错误?

【问题讨论】:

第 1 阶段有一个提案(不过有一个 Babel 插件)github.com/tc39/proposal-optional-chaining |另外,复制:Null-safe property access (and conditional assignment) in ES6/2015 【参考方案1】:

更新

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

x = a.b?.c?.d?.e?.f?.g

要在访问失败时使用默认值,您可以使用Nullish coalescing operator (??)

x = a.b?.c?.d?.e?.f?.g ?? 'my default value'

原始答案(2017 年)

最简单的方法是使用try catch

try 
  x = a.b.c.d.e.f.g
 catch(e) 
  x = undefined;

有一个名为optional chaining的提案,您可以在这里查看:https://github.com/tc39/proposal-optional-chaining

x = a.b?.c?.d?.e?.f?.g

如果您使用的是转译器,您将能够使用它,但它仍处于早期阶段,可能不被规范支持

【讨论】:

【参考方案2】:

有一些建议可以解决这个(语法糖缺失)问题。希望有一天我们可以这样做:

let x = a?.b?.c?.d?.e;

但是,在那之前,如果变量未定义,我们需要回退到对象:

var x =( ( ( ( (a || ).b ||  ) ||  ).c ||  ).d || ).e;

我承认这很丑。也许对象解构更漂亮:

let ( 
   b:  
     c:  
       d:  e:x  = 
      = 
    = 
) = a;

【讨论】:

以上是关于JavaScript中的存在运算符? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

<<= 运算符在 javascript 中的作用是啥? [复制]

Javascript中的递增/递减运算符是不是被认为是错误的形式? [复制]

javascript中的“变量|| ”是啥? [复制]

python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]

有人可以用 javascript 为我解释 =+ 运算符吗? [复制]

JavaScript 运算符