Чем нулевой оператор объединения (??) отличается от логического оператора OR (||) в ECMAScript?

ES2020 представил нулевой оператор объединения (??), который возвращает правый операнд, если левый операнд равен нулю или не определен. Эта функция аналогична логическому оператору ИЛИ (||). Например, приведенные ниже выражения возвращают те же результаты.

       const a = undefined
const b = "B"

const orOperator = a || b
const nullishOperator = a ?? b
  
console.log({ orOperator, nullishOperator })

результат:

       {
    orOperator:"B",
    nullishOperator:"B"
}

Так чем же отличается нулевой оператор и каковы его варианты использования?

2 ответа

Решение

В ||-operator оценивает правую часть тогда и только тогда, когда левая часть является ложным значением.

В ??-operator (null coalescing) оценивает правую сторону тогда и только тогда, когда левая сторона либо null или же undefined.

false, 0, NaN, ""(пустая строка), например, считаются ложными, но, возможно, вам действительно нужны эти значения. В этом случае ??-operator - это правильный оператор.

Если вы хотите предоставить значение по умолчанию для числа, которое потенциально может быть NaN, сделайте следующее:

      a = a || 0

// Not this
// a = a ?? 0

Также см. преобразование NaN в ноль .

Объяснение:

Оба оператора используются для предоставления значения по умолчанию для переменной. Ситуация с обработкой возможного значения NaN может иметь некоторую разницу:

      let userAge = null

let age1 = userAge || 21
let age2 = userAge ?? 21
console.log(age1) // 21
console.log(age2) // 21
      let userAge = parseFloat(null)

let age1 = userAge || 21
let age2 = userAge ?? 21
console.log(age1) // 21
console.log(age2) // NaN

Если вы хотите, чтобы значение с возможным значением NaN возвращалось к значению по умолчанию, выберите||. Двойной вопросительный знак, известный как нулевой оператор??здесь не используется резервный вариант.

Другие вопросы по тегам