JavaScript中的存在运算符? [复制]
Posted
技术标签:
【中文标题】JavaScript中的存在运算符? [复制]【英文标题】:Existential operator in JavaScript? [duplicate] 【发布时间】:2018-02-09 21:03:15 【问题描述】:我有一个大的 json 对象。我需要访问x = a.b.c.d.e.f.g
。但是b
(或c
、d
、e
...)可以是未定义的。正在从其他地方导入此数据结构。
有没有办法尝试将x
分配给null
或undefined
而不会引发错误?
【问题讨论】:
第 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中的递增/递减运算符是不是被认为是错误的形式? [复制]
python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]