如何避免出现“cannot read property of undefined”错误
开发时经常会出现某对象属性为undefined,而继续获取下一层属性时导致报错,有以下方案可以避免错误的发生
使用方法库
lodash中的_.get或者Ramda 里的 R.path方法;
但有时只是想单纯避免出现这个错误,而不想引入整合类库造成不必要的浪费.
使用 && “短路”
使用&&
符号,例如:
1 | meals.breakfast && meals.breakfast.protein |
但是会导致获取属性值时有重复的代码,比如前面的meals.breakfast
使用“或单元”
同上是一种特殊的代码结构,在每个||
后都有一个默认值防止报错,例如:
1 | ((favorites.reading||{}).books||[])[0], |
然而此方案代码可读性较差;
使用try/catch
此方案检查单个属性可用,多个属性写在里面无法排查错误位置;
未来展望
可选链式调用:TC39 提案中的一个功能,例如
1 | favorites?.video?.shows[0]; |