let restaurant = {
orderPizza: function(arg1, arg2, arg3) {
return `Your pizza with ${arg1}, ${arg2} and ${arg3} is ready`
},
orderRisotto: function(arg1, arg2, arg3) {
return `Your risotto with ${arg1}, ${arg2} and ${arg3} is ready`
}
}
console.log(restaurant.orderPizza?.('onion', 'tomato', 'basil') ?? "Method not found");
console.log(restaurant.orderRisotto?.('onion', 'tomato', 'basil')) ?? "Method not found";
尝试在我的本地机器上执行上面的代码片段,我能够按照预期正确执行它。
注意:这两个 console.log 语句是不同的。
如果您尝试在开发工具控制台中执行这些命令,结果会有所不同。
对于第一个 console.log 语句 -
console.log(restaurant.orderPizza?.('onion', 'tomato', 'basil') ?? "Method not found");
结果将符合预期,因为字符串是从 orderPizza 方法返回的,并且 Nullish 合并运算符的表达式左侧不是 null 或未定义。因此控制台打印 -
Your pizza with onion, tomato and basil is ready
但是对于第二个 console.log 语句 -
console.log(restaurant.orderRisotto?.('onion', 'tomato', 'basil')) ?? "Method not found";
注意 console.log 的右括号。该声明将打印 -
Your risotto with onion, tomato and basil is ready
"Method not found"
orderRisotto 方法按预期工作并生成字符串,然后将其传递给控制台的 log 方法。但是由于 log 方法是一个 void 方法,它返回 undefined,这使得左侧 Nullish 合并运算符未定义,因此右侧也被评估。
我希望这个答案有帮助。