Короче говоря, разница между двумя операторами сводится к разнице между 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"