Node.js使用??=逻辑空赋值运算符报Unexpected token '??='错误如何解决
报错原因及解决方案
报错原因
??=逻辑空赋值运算符是ES2021(ES12)正式纳入ECMAScript标准的新增语法,Node.js对该语法的最低支持版本为v15.0.0。你当前使用的Node.js版本低于15.0.0,内置的JS引擎无法识别该新语法,因此抛出SyntaxError: Unexpected token '??='错误。
浏览器可正常运行是因为你使用的现代浏览器已经跟进支持了该ES2021特性,浏览器与Node.js的JS引擎迭代节奏、版本支持范围存在差异,因此会出现两端表现不一致的情况。
解决方案
- 方案1:升级Node.js版本
直接将Node.js升级到v15.0.0及以上版本即可原生支持该语法,优先选择v18、v20等官方长期维护的LTS(长期支持)版本,无需修改现有代码即可正常运行。 - 方案2:替换为低版本兼容的等价语法
无需升级Node.js版本,将??=语法替换为旧版JS兼容的写法即可:
原代码:
等价兼容写法:tasksSorted[0] ??= {};// 仅在tasksSorted[0]为null或undefined时赋值空对象 if (tasksSorted[0] === null || tasksSorted[0] === undefined) { tasksSorted[0] = {}; } - 方案3:通过Babel转译新语法
若项目需要兼容低版本Node.js且不想修改业务代码,可在项目中引入Babel并配置逻辑赋值运算符的转译插件,构建时自动将新语法转译为当前Node版本可识别的旧语法。
内容的提问来源于stack exchange,提问作者rustyBucketBay
相关产品推荐
相关产品推荐

