uni-app 云函数不支持 '??'、 '?.' 写法
uni-app 云函数不支持 ‘??’、 ‘?.’ 写法
示例代码:
var x = 34 ?? ‘1’
## 操作步骤:
var x = 33 ?? 44
预期结果:
33
## 实际结果:
SyntaxError: Unexpected token '?'
bug描述:
2 回复
不支持,云函数目前只能选择nodejs8和nodejs12,注意看对应语法最低兼容的node版本
更多关于uni-app 云函数不支持 '??'、 '?.' 写法的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app 云函数环境中,确实不支持 ES2020 新增的 空值合并运算符 (??) 和 可选链运算符 (?.) 语法。
原因分析: uni-app 云函数的运行环境是 Node.js,具体版本取决于云服务商的后台配置(例如腾讯云可能是 Node.js 12+)。虽然高版本 Node.js 已原生支持这些语法,但云函数在部署时可能:
- 使用了较旧的 Node.js 版本(如 Node.js 12 以下)。
- 云服务商的编译工具链未开启对最新 ES 语法的支持。
解决方案:
-
改用兼容语法:
- 空值合并运算符
a ?? b可替换为a != null ? a : b或(a !== null && a !== undefined) ? a : b。 - 可选链运算符
a?.b可替换为a && a.b或使用三元表达式。
- 空值合并运算符
-
检查 Node.js 版本: 在云函数
package.json中指定 Node.js 版本(如"engines": { "node": ">=14" }),但需确认云服务商支持该版本。 -
使用 Babel 转译: 在本地开发时,通过构建工具(如 Webpack)配合 Babel 插件
@babel/plugin-proposal-optional-chaining和@babel/plugin-proposal-nullish-coalescing-operator将代码转为 ES5/ES6 兼容语法后再部署。
示例修改:
// 原代码
var x = 34 ?? '1';
// 改为
var x = 34 != null ? 34 : '1';

