在NodeJS中使用Nullish coalescing assignment operator (??=)是否可行?
问题解决方法
报错根因
Nullish coalescing assignment operator(??=,空值合并赋值运算符)属于ES2021(ES12)新增语法,你当前使用的Node.js版本低于v15.14.0(该语法的最低支持Node.js版本),引擎无法识别该语法,因此抛出Unexpected token '?'语法错误。
解决方案
可选两种方案处理:
- 方案1:升级Node.js版本到v15.14.0或更高
升级后不需要修改代码即可直接正常运行,可通过node -v命令查看当前Node.js版本,确认是否满足要求。 - 方案2:改写语法兼容低版本Node.js
??=的逻辑为仅当左侧变量值为null或undefined时,才将右侧值赋值给左侧变量,你可以把代码中的对应逻辑替换为等价兼容写法,同时修正原代码中变量名写错的问题:
完整修改后代码如下:const setValue = (object, path, value) => { const indices = { first: 0, second: 1 }, keys = path.replace(new RegExp(Object.keys(indices).join('|'), 'g'), k => indices[k]).split('.'), last = keys.pop(); keys .reduce((o, k, i, kk) => { // 等价替换??=语法 if (o[k] === null || o[k] === undefined) { o[k] = isFinite(i + 1 in kk ? kk[i + 1] : last) ? [] : {} } return o[k] }, object)[last] = value; // 修正原代码变量名错误,原返回obj未定义 return object; }
内容的提问来源于stack exchange,提问作者Hamada
相关产品推荐
相关产品推荐

