在使用 JavaScript 进行前端开发时,我们经常会使用 ESLint 工具来检查代码规范和潜在的错误,以保证代码的可读性和可维护性。但在实际开发中,有时我们会遇到 ESLint 报错:Expected an assignment or function call and instead saw an expression,提示我们在代码中出现了表达式,而 ESLint 要求代码必须是语句、函数调用或赋值表达式。这种错误让我们感到困惑,对代码的编写也带来了一定的限制,本文将介绍这种情况的解决方案。
报错原因
在 JavaScript 中,表达式是由操作符和操作数组成的任何一个语句。例如:var a = 1 + 2
中的 1 + 2
就是一个表达式,它由操作符 +
和操作数 1
、2
组成。而 1 + 2
并不是语句,它是一个表达式语句的一部分。ESLint 的规则要求我们在代码中只能使用语句、函数调用或赋值表达式,任何返回值的表达式都将被认为是不正确的,这也就是出现报错的原因。
解决方案
针对这种报错,我们通常有两种解决方案。
方案一:忽略该规则
当我们确定该表达式没有错误时,可以选择忽略该规则,让 ESLint 不再对该表达式进行检查。具体方式是在 .eslintrc.js 文件中添加如下规则:
// javascriptcn.com 代码示例 { "rules": { "no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true, "allowTaggedTemplates": true }] } }
其中,no-unused-expressions 就是 ESLint 报错的规则名,我们需要将其设置为 "error",表示该规则必须遵守,并且通过对象的配置项设置三个选项:
- allowShortCircuit:允许使用逻辑短路语句,例如
a && b()
。 - allowTernary:允许使用三元运算符
a ? b() : c()
。 - allowTaggedTemplates:允许使用自定义的模板字符串,例如
tag
。
通过这种方式,我们可以忽略该规则的报错,但也不能完全放任不管,需要谨慎使用。
方案二:转化为语句或函数调用
当我们确定该表达式必须使用时,可以考虑将其转换为语句或函数调用的形式。具体方式取决于表达式的具体情况,以下是几种常见的做法。
方案一:添加 void
关键字
当我们需要执行一个表达式而不需要返回值时,可以使用 void
关键字将其转化为语句。例如:
let a = 1 void a++ // 转化为语句
方案二:使用自执行函数
当我们需要返回一个值时,可以使用自执行函数将该表达式包裹起来,从而将其转换为函数调用。例如:
let a = (function() { return 1 + 2 })() // 转化为函数调用
方案三:使用模板字符串
当我们需要在模板字符串中使用表达式时,可以使用 ${}
的形式将其包裹起来。例如:
let a = 1 console.log(`a = ${a}`) // 转化为模板字符串
总结
ESLint 报错 Expected an assignment or function call and instead saw an expression 的原因是规定代码中只能使用语句、函数调用或赋值表达式,任何返回值的表达式都将被认为是不正确的。解决方案包括忽略该规则和转化为语句或函数调用。选择哪种方案取决于具体情况,需要在保证代码规范的前提下灵活处理。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/654b69947d4982a6eb54335e