适才看了下一个 JS 新特征——「Optional Chaining」,这是干啥用的呢?
过去在 Object 属性链的挪用中,很轻易由于某个属性不存在而致使以后涌现Cannot read property xxx of undefined
的毛病。
const obj = {
qwe: {
asd: {
zxc: '666'
}
}
}
console.log(obj.qwe.asd.zxc); // 666
console.log(obj.abc.def.ghi); // Uncaught TypeError: Cannot read property 'def' of undefined...
那 optional chaining 就是添加了?.
这么个操作符,它会先推断前面的值,假如是 null 或 undefined,就完毕挪用、返回 undefined。
console.log(obj?.abc?.def?.ghi); // undefined
要注意操作符是?.
,而不是零丁的?
。因而,假如属性链中取某个 Array 的元素,应该是obj?.qwe?.arr?.[0]
。相似的,假如须要取属性链中某函数并实行,就应该是obj?.qwe?.func?.()
。
这个特征能够说是异常实用了,不过它如今处于 stage-1 阶段,预计进入规范另有段时候。不过 Babel v7 beta 已添加了此特征的插件,想如今用起来的同砚能够装置起来。