Короче говоря, разница между двумя операторами сводится к разнице между falsy
и null/undefined
. Оператор логический или (||
) принимает правильный операнд в случае falsy
value, который включает пустую строку, 0, false, NaN и т. Д. Оператор слияния с нулевым значением (??
) принимает правый операнд, только если для левой стороны установлено значение null
или undefined
. Сказав это, мы можем рассматривать оператор ??
как подмножество ||
.
Практический пример того, где мы хотели бы использовать ??
вместо ||
, - это когда пустая строка ""
является допустимым значением, а мы хотим, чтобы значение по умолчанию было N/A
. Без ??
нам нужно было бы написать:
if(currentDescription == null) { targetDescriptionn = "N/A"; } else { targetDescriptionn = currentDescription; } // or using the ternary operator targetDescription = currentDescription == null ? "N/A": currentDescription
который можно заменить более коротким однострочником:
targetDescriptionn = currentDescription ?? "N/A"
Я дважды проверяю любое поведение Javascript, в котором я не уверен (все мы знаем, что javascript не всегда ведет себя так, как мы ожидаем), путем запуска интерактивной оболочки nodejs. По моему опыту, это более быстрый способ, чем поиск ответа в Google. Чтобы получить доступ к интерактивной оболочке NodeJS, просто введите node
в терминале (предполагается, что nodejs добавлен в $PATH
).
Дополнительные операторы - логические операторы присваивания И (&& =) и ИЛИ (|| =)
Логические операторы присваивания И и ИЛИ доступны только в NodeJS версии 15+
Хорошим дополнением к вышеуказанному оператору является logical AND assignment (&&=)
, который ведет себя очень похоже на additional assignment operator (+=)
. Отличный вариант использования оператора - установка значений по умолчанию для существующей переменной.
description &&= "N/A"
Как уже обсуждалось в предыдущем разделе, значение описания будет установлено на N/A
только в том случае, если переменная описания установлена на null
или undefined
.
Опять же, если, однако, требуется изменить значение описания в случае значения falsy
(скажем, пустой строки), можно использовать logical OR assignment (||=)
description ||= "N/A"