JS解构参数设默认值时报Cannot read property of undefined如何解决
错误产生原因
你仅为解构得到的三个过滤器属性设置了默认值,没有给整个第三个参数对象设置默认值。当调用model函数时如果没有传入第三个参数,该参数本身就是undefined,此时对undefined执行对象解构操作,尝试读取placeFilter属性就会直接抛出报错。
修复方法
给第三个参数整体设置默认值为空对象{}即可,修改后的代码如下:
const model = (data, predictions, { placeFilter = true, startDateFilter = true, endDateFilter = true } = {}) => { const getData = () => data.filter(placeFilter).filter(startDateFilter).filter(endDateFilter) }
逻辑说明
- 原有写法的执行逻辑是:先把第三个参数当作对象读取
placeFilter等属性,仅当属性不存在时才会赋值为true。如果第三个参数本身是undefined,读取属性的第一步就会报错,不会走到属性默认值赋值的逻辑 - 新增
= {}后,如果没有传入第三个参数,会先把该参数默认赋值为空对象,再从空对象中解构三个属性,此时属性不存在就会触发你预设的属性默认值,逻辑可以正常运行
内容的提问来源于stack exchange,提问作者kakakakakakakk
相关产品推荐
相关产品推荐

