You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:57:43