JavaScript中的存在运算符?

时间:2017-08-31 20:12:17

标签: javascript existential-operator

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

有没有办法尝试与xnull分配undefined而不会抛出错误?

2 个答案:

答案 0 :(得分:4)

最简单的方法是使用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

如果您正在使用转换器,您将能够使用它,但它仍然处于非常早期阶段,可能不会被接受在规范中支持

答案 1 :(得分:3)

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

refinedData

然而,在此之前,如果变量未定义,我们需要回退到对象:

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

我承认这很难看。也许对象解构更美丽:

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