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 已原生支持这些语法,但云函数在部署时可能:

  1. 使用了较旧的 Node.js 版本(如 Node.js 12 以下)。
  2. 云服务商的编译工具链未开启对最新 ES 语法的支持。

解决方案:

  1. 改用兼容语法

    • 空值合并运算符 a ?? b 可替换为 a != null ? a : b(a !== null && a !== undefined) ? a : b
    • 可选链运算符 a?.b 可替换为 a && a.b 或使用三元表达式。
  2. 检查 Node.js 版本: 在云函数 package.json 中指定 Node.js 版本(如 "engines": { "node": ">=14" }),但需确认云服务商支持该版本。

  3. 使用 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';
回到顶部