使用find方法过滤对象时遇'Expected an identifier and instead saw let'错误求助
解决"Expected an identifier and instead saw 'let'"错误的方案
嘿,我来帮你拆解这个问题!你碰到的Expected an identifier and instead saw 'let'报错,核心原因很简单——你的代码运行环境不支持ES6的let变量声明,或者是代码检测工具(比如JSHint、ESLint)没配置成允许ES6语法。
为啥会报错?
- 早期的JavaScript环境(比如旧版IE、或者一些没做ES6兼容配置的项目)只认ES5及更早的语法,
let是ES6才新增的变量声明方式,这些环境会把let当成非法的标识符,直接抛错。 - 另外如果用了代码检查工具,比如JSHint默认是不开启ES6支持的,它也会抛出这个提示,认为
let是不合法的写法。
两种解决办法任你选
1. 让环境支持ES6
如果是在浏览器里运行,尽量换成Chrome、Firefox这类现代浏览器;如果是项目开发场景,比如用了Webpack+Babel,就配置Babel把ES6代码转成ES5兼容版本;要是用了代码检查工具,在配置文件里开启ES6支持就行(比如JSHint的配置里加"esversion": 6)。
2. 改用ES5语法替代
如果暂时没法调整环境,直接把let换成ES5的var就行,在这个场景下功能完全一致:
var arr = $scope.items; //object data var stringToFilter = newSortingOrder.toString(); var obj = arr.find(o => o.id === stringToFilter);
⚠️ 额外提醒:Array.find()也是ES6的方法,如果你的运行环境连这个也不支持,就换成ES5的filter写法取第一个匹配项:
var obj = arr.filter(function(o) { return o.id === stringToFilter; })[0];
内容的提问来源于stack exchange,提问作者Mr world wide
相关产品推荐
相关产品推荐

