JS代码报expected an identifier and instead saw an expression错误原因求助
问题排查解答
1. 警告的产生原因
你代码里的obj定义存在语法歧义,此处触发了逗号运算符规则:
// 错误写法 obj = {"ignoredid":"3329"},{"ignoredid":"19693"};
JavaScript解析时会依次执行逗号分隔的两个表达式,最终仅将第二个表达式的结果(即{"ignoredid":"19693"})赋值给obj。这个写法不符合标准变量赋值的语法预期,所以静态检查工具会抛出expected an identifier and instead saw an expression的警告。
你实际项目中始终输出doesnt的核心原因也在这里:obj实际只保存了第二个对象,Object.values(obj)拿到的结果永远是["19693"],不可能匹配到3329。
2. 修复方案
根据你的业务需求,有两种常用修复方式:
- 如果你要存储多个id对象,可直接定义为数组,遍历匹配对应字段:
// 修复写法1:数组存储+字段匹配 const objArr = [{"ignoredid":"3329"},{"ignoredid":"19693"}]; const hit = "3329"; if (objArr.some(item => item.ignoredid === hit)) { console.log('has it'); } else { console.log('doesnt'); }
- 如果你要使用
Object.values做匹配,可把id存为单对象的属性值数组:
// 修复写法2:单对象存储id数组 const obj = { ignoredid: ["3329", "19693"] }; const hit = "3329"; if (Object.values(obj).flat().indexOf(hit) > -1) { console.log('has it'); } else { console.log('doesnt'); }
修复警告后代码可以正常运行。
3. 其他遗漏问题
你原有代码没有给变量加声明关键字(let/const/var),会隐式创建全局变量,容易引发变量污染、命名冲突等问题,建议统一加上变量声明。
内容的提问来源于stack exchange,提问作者Cain Nuke
相关产品推荐
相关产品推荐

