我不确定 JavaScript 可选链实现背后的逻辑。
const a = {b:1}
1 > console.log(a?.c) => undefined
2 > console.log(a?.c?.d) => undefined
3 > console.log(a?.c.d) => Uncaught TypeError: Cannot read property 'd' of undefined
只要一切有意义,就会一切顺利。但是:
4 > console.log(a?.c?.d.e) => undefined
5 > console.log(a?.c?.d.e.f.g) => undefined
访问未定义的属性会抛出错误 (#3),但是在两个可选链之后访问任意数量的不存在的嵌套属性不再抛出错误。
?
,那么表达式的其余部分就会正常工作,因为它会短路。 - Pointya = { b: { c: { d: "value" }}}
或a = {}
。你可以写成a?.b.c.d
。如果是第一种情况,它会返回"value";如果是第二种情况,它会发现.b
属性不存在(undefined
),所以忽略后面的内容并返回undefined
。但是,如果你有a = { b: {}}
,那么对b
属性的访问不是undefined
,它将计算剩下的内容,这会导致错误。 - ASDFGertea?.b
在“旧语法”中等同于a || a.b
,因此a?.b.c
等同于a || a.b.c
- 如果a.b
是undefined
,那么就没有阻止链接的东西。而a?.b?.c
将是a || a.b || a.b.c
,因此您可以安全地避免从undefined
中获取.c
。 - VLAZ