Обе стороны нулевого оператора объединения в JavaScript выполняются
console.log(restaurant.orderPizza?.('onion','tomato','basil') ?? 'Method does not exist');
console.log(restaurant.orderRissotto?.('onion','tomato','basil') ?? 'Method does not exist'
orderPizza и orderRissotto - это два метода внутри объекта restaurant .
Когда я регистрирую их с помощью оператора Nullish Coalesceing, вывод метода регистрируется, потому что метод доступен. Однако вторая часть «Метод не существует» также регистрируется. В чем может быть причина?
Бревно:
Your pizza with onion, tomato and basil is ready
Method does not exist
2 ответа
в
Null Safe
возвращается
null
, и оператор вернет вторую часть, если первая ... поэтому, если ваш метод не существует, нулевой сейф вернет null, и поэтому будет возвращена вторая часть, но если метод существует, но возвращает
null || undefined
значение, первая часть будет запущена, но вторая часть будет напечатана (поскольку ваш метод возвращает одно из значений,
Nullish coalescing
используйте, чтобы определить, следует ли возвращать вторую часть)
Попытавшись выполнить приведенный выше фрагмент кода на моем локальном компьютере, я смог выполнить его должным образом, как и ожидалось.
ПРИМЕЧАНИЕ. Оба оператора console.log различны.
Если вы попытаетесь выполнить эти команды в консоли инструментов разработчика, результаты будут другими.
Для первого оператора console.log -
console.log(restaurant.orderPizza?.('onion', 'tomato', 'basil') ?? "Method not found");
результат будет таким, как ожидалось, поскольку строка возвращается из метода orderPizza, а оператор объединения Nullish имеет левую часть выражения NOT null или undefined. Следовательно, консоль печатает -
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 работает согласно ожиданиям и возвращает строку, которая затем передается в метод журнала консоли. Но поскольку метод журнала является недействительным, он возвращает undefined, что затем делает нулевой оператор объединения с левой стороны неопределенным, и, следовательно, правая часть также оценивается.
Надеюсь, этот ответ поможет.