如何让ESLint识别并接受空值合并赋值运算符?
问题原因及解决办法
为什么ESLint会报错?
??=是ES2021引入的空值合并赋值运算符,ESLint要识别它,必须让解析器支持ES2021及以上的语法规范。你使用的ESLint 8.38.0版本虽不算陈旧,但默认配置里的ecmaVersion可能未设置为2021,或是默认解析器(Espree)未开启对应语法支持,导致把??=判定为非法语法报错。
另外你写的var ObjectUtils ??= ...,语法上是合法的(等价于先声明变量再执行空值合并赋值),但只要解析器不支持ES2021,就会把??后的=识别为语法错误。
怎么让ESLint接受这个运算符?
修改ESLint配置文件
在你的.eslintrc.js、.eslintrc.json或其他配置文件中,确保parserOptions.ecmaVersion设置为2021或更高版本:module.exports = { // 其他配置... parserOptions: { ecmaVersion: 2021 // 也可设为"latest"自动适配最新语法规范 } };如果使用Babel解析器
若项目用Babel处理JS语法,需先安装@babel/eslint-parser,再在ESLint配置中指定该解析器:
安装依赖:npm install @babel/eslint-parser --save-dev修改ESLint配置:
module.exports = { parser: "@babel/eslint-parser", parserOptions: { ecmaVersion: 2021, babelOptions: { presets: ["@babel/preset-env"] // 根据你的Babel预设调整 } } // 其他配置... };临时替代方案(不推荐)
若暂时不想修改配置,可把代码拆分为两步绕开??=的语法:var ObjectUtils; ObjectUtils ??= ChromeUtils.import("resource://gre/modules/ObjectUtils.jsm").ObjectUtils;但这只是临时 workaround,更推荐通过配置让ESLint原生支持新语法。
内容的提问来源于stack exchange,提问作者einpoklum
相关产品推荐
相关产品推荐

