CRUD脚本报Uncaught TypeError: Cannot read property 'filter' of undefined求助
报错原因
Uncaught TypeError: Cannot read property 'filter' of undefined 报错的直接原因是代码中调用filter方法的data变量在search函数执行时为undefined,而filter是仅数组类型支持的实例方法。
排查修复方案
- 检查
data变量的赋值时机
如果data是后端接口返回的动态数据,必须保证search函数的触发逻辑(比如搜索框的事件绑定)在接口请求成功、data被赋值为数组之后执行;如果data是页面静态数据源,要确认数据源初始化逻辑在search函数执行前完成。 - 新增变量类型校验,避免报错
可修改filter调用部分的代码,提前对data的类型做判断,异常场景默认返回空数组阻止报错,同时也可以对r[1]增加非空判断避免后续调用indexOf时报错:
var resultsArray = Array.isArray(data) ? data.filter(function(r){ return r && r[1] && r[1].indexOf(searchInput) !== -1; }) : [];
- 检查
data变量的作用域
如果data是在其他函数内部声明的局部变量,search函数无法访问到对应值,需要将data提升到两个函数共同的父级作用域声明,或者将data作为参数传入search函数使用。
内容的提问来源于stack exchange,提问作者Scott Harmon
相关产品推荐
相关产品推荐

