Чем нулевой оператор объединения (??) отличается от логического оператора 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 возвращалось к значению по умолчанию, выберите||
. Двойной вопросительный знак, известный как нулевой оператор??
здесь не используется резервный вариант.