obj是后端接收来的,可能为null
只能这样取值吗?
let name = obj && obj.name
这种写法至今算是比较主流的一种,优点是计算次数比较少,缺点是obj层级太多写起来就麻烦了
最新的ECMA倒是有新的写法提案
let name = obj?.name
只是现在绝部分浏览器不兼容而已
const getter = (target, exec = '_') => {
return new Proxy({}, {
get: (o, n) => {
return n === exec ?
target :
getter(typeof target === 'undefined' ? target : target[n], exec)
}
})
}
getter(obj.name)._
你这个表达式的值只有两种true
或者false
,因为你这个是布尔运算
,不是短路运算
let name = obj && obj.name
建议的写法如下:
if(!obj || !obj.name) {
return;
}
// 开始正常逻辑
改写法可以有效解决if嵌套太深的问题
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
可以使用lodash中的get,也可以自己用循环或者递归写一个方法:
这是我前几天实现了一个简单的方案:https://segmentfault.com/q/10...