Javascript如何避免调用不存在的属性而致使报TypeError错?

问题

var object = { 'a': [{ 'b': { 'c': 3 } }] }

console.log(object.a[0].b.c.d)

上述代码会返回babel

clipboard.png

方法一

var object = { 'a': [{ 'b': { 'c': 3 } }] }

console.log(object&&object.a)
console.log(object&&object.a&&object.a[0])
console.log(object&&object.a&&object.a[0]&&object.a[0].b)
console.log(object&&object.a&&object.a[0]&&object.a[0].b&&object.a[0].b.c)
console.log(object&&object.a&&object.a[0]&&object.a[0].b&&object.a[0].b.c&&object.a[0].b.c.d)

方法二

使用lodashpost

var object = { 'a': [{ 'b': { 'c': 3 } }] }

console.log(_.get(object, 'a'))
console.log(_.get(object, 'a[0]'))
console.log(_.get(object, 'a[0].b'))
console.log(_.get(object, 'a[0].b.c'))
console.log(_.get(object, 'a[0].b.c.d'))

方法三

var getProps = (p, o) => p.reduce((xs, x) => (xs && xs[x]) ? xs[x] : null, o)

var object = { 'a': [{ 'b': { 'c': 3 } }] }

console.log(getProps(['a'], object))
console.log(getProps(['a', '0'], object))
console.log(getProps(['a', '0', 'b'], object))
console.log(getProps(['a', '0', 'b', 'c'], object))
console.log(getProps(['a', '0', 'b', 'c', 'd'], object))

方法四

自判断连接,自判断连接还未归入官方规范中,只处于第一阶段的实验特性。您须要在 babelrc 中添加 @ babel / plugin-proposal-optional-chaining 后方可以使用它。spa

var object = { 'a': [{ 'b': { 'c': 3 } }] }

console.log(object?.a[0]?.b?.c?.d)

参考连接

[译] 优秀 JavaScript 开发人员应掌握的 9 个技巧code

相关文章
相关标签/搜索