node.js - 在 JavaScript 中可选链的最佳替代方案
我有以下链式操作符
const age = data.student?.age ? data.student.age: '';
这在我的本地机器上运行正常,但在另一台机器上似乎有问题。经过进一步调查,我了解到 Node.js 较低版本(我猜低于 12 版本)不支持链式运算符。我知道我可以像下面这样用 if 条件来替代,但我想了解对于这个问题最好的可能替代方案是什么。
function checkAge(data){
if(data && data.student && data.student.age) {
return data.student.age;
} else {
return '';
}
}
const age = checkAge(data);
答案#1
无需修改代码。您只需要在您的 TypeScript 配置中修改 target 选项,并将其设置为 ES2019 或更低版本。然后您可以在 TypeScript 代码中使用可选链,编译器将生成等效的代码。
TypeScript 代码
const foo = a?.b?.c;
变成
"use strict";
var _a;
const foo = (_a = a === null || a === void 0 ? void 0 : a.b) === null || _a === void 0 ? void 0 : _a.c;
编译后:Playground 链接
答案#2
如果问题是可读性,你可能可以尝试对象解构。所以,你的赋值可能看起来像这样:
const {
student: {
age = ''
} = {}
} = data
