我有一个大的 json 对象。我需要访问x = a.b.c.d.e.f.g
. 但是b
(或c
, d
, e
...) 可以是未定义的。这个数据结构是从其他地方导入的。
有没有办法尝试在x
有null
或undefined
没有抛出错误的情况下进行分配?
我有一个大的 json 对象。我需要访问x = a.b.c.d.e.f.g
. 但是b
(或c
, d
, e
...) 可以是未定义的。这个数据结构是从其他地方导入的。
有没有办法尝试在x
有null
或undefined
没有抛出错误的情况下进行分配?
可选链现在是 ECMAScript 规范的一部分,可以在大多数 javascript 客户端(浏览器、node.js 等)上使用
x = a.b?.c?.d?.e?.f?.g
要在访问失败时使用默认值,您可以使用Nullish 合并运算符 (??)
x = a.b?.c?.d?.e?.f?.g ?? 'my default value'
最简单的方法是使用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
如果您使用的是转译器,您将能够使用它,但它仍处于早期阶段,可能不被接受在规范中得到支持
有一些建议可以解决这个(语法糖缺失)问题。希望有一天我们可以这样做:
let x = a?.b?.c?.d?.e;
但是,在那之前,如果变量未定义,我们需要回退到对象:
var x =( ( ( ( (a || {}).b || {} ) || {} ).c || {} ).d || {}).e;
我承认这很丑陋。也许对象解构更漂亮:
let ({
b: {
c: {
d: { e:x } = {}
} = {}
} = {}
}) = a;