0
console.log(restaurant.orderPizza?.('onion','tomato','basil') ?? 'Method does not exist');

console.log(restaurant.orderRissotto?.('onion','tomato','basil') ?? 'Method does not exist'

orderPizzaorderRissotto是对象restaurant中的两个方法。

当我使用 Nullish Coalesceing 运算符记录它们时,方法输出会被记录,因为方法可用。但是,第二部分“方法不存在”也会被记录。可能是什么原因?

日志:

Your pizza with onion, tomato and basil is ready
Method does not exist
4

2 回答 2

1

Null Safe返回nullNullish coalescing如果第一个是...,则运算符将返回第二个部分。null || undefined因此,如果您的方法不存在,则 null 安全将返回 null,因此将返回第二部分,但如果方法存在但返回null || undefined值,将运行第一部分,但将打印第二部分(因为您的方法返回Nullish coalescing用于确定是否应返回第二部分的值之一)

于 2021-06-02T17:57:38.443 回答
0

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 合并运算符未定义,因此右侧也被评估。

我希望这个答案有帮助。

于 2021-06-03T06:28:50.487 回答