Нулевой оператор объединения был добавлен в ES11, который обозначен двойными вопросительными знаками, например: ??
. В этой статье мы узнаем, почему это так полезно и как его использовать.
Исходная информация
В JavaScript есть логический оператор короткого замыкания ИЛИ ||
. Он возвращает первое истинное значение.
Другими словами, операторы &&
и ||
(«короткое замыкание») не оценивают правую сторону, если это не обязательно.
Ниже приведены единственные шесть значений, которые считаются ложными в JavaScript:
-
- false
- undefined
- null
""
(empty string)- NaN
- 0
Так что, если чего-либо нет в приведенном выше списке, это будет считаться истинным значением.
Значения истинности и ложности — это небулевы значения, которые приводятся к false
или true
при выполнении определенных операций.
const value1 = 1; const value2 = 23; const result = value1 || value2; console.log(result); // 1
Поскольку оператор ||
возвращает первое истинное значение, в приведенном выше коде результатом будет значение, сохраненное в value1
, которое равно 1
.
Если value1
является null
, undefined
, empty
или любым другим ложным значением, то следующий операнд после оператора ||
будет вычислен, и это будет результатом общего выражения:
const value1 = 0; const value2 = 23; const value3 = "Hello"; const result = value1 || value2 || value3; console.log(result); // 23
Здесь, поскольку value1
равно 0, будет проверяться value2
. Поскольку это истинное значение, результатом всего выражения будет value2
.
Проблема с ||
заключается в том, что он не делает различий между false
, 0
, пустой строкой ""
, NaN
, null
и undefined
. Все они считаются ложными.
Если любой из них является первым операндом ||
, то в результате мы получим второй операнд.
Зачем JavaScript нужен нулевой оператор объединения
Оператор ||
отлично работает, но иногда мы хотим, чтобы вычислялось только следующее выражение, когда первый операнд либо равен null
или undefined
.
Поэтому в ES11 добавлен нулевой оператор объединения.
В выражении x ?? у
:
- Если
x
имеет значениеnull
илиundefined
, тогда будет толькоу
. - Если
x
не равенnull
илиundefined
, результатом будетx
.
Это упростит проверку условий и отладку кода.
Попробуйте сами:
let result = undefined ?? "Hello"; console.log(result); // Hello result = null ?? true; console.log(result); // true result = false ?? true; console.log(result); // false result = 45 ?? true; console.log(result); // 45 result = "" ?? true; console.log(result); // "" result = NaN ?? true; console.log(result); // NaN result = 4 > 5 ?? true; console.log(result); // false поскольку 4 > 5 оценивается как false result = 4 < 5 ?? true; console.log(result); // true поскольку 4 < 5 оценивается как true result = [1, 2, 3] ?? true; console.log(result); // [1, 2, 3]
Итак, из всех приведенных выше примеров ясно, что результат операции x ?? y
является y
только тогда, когда x
либо undefined
, либо null
.
Во всех остальных случаях результатом операции всегда будет x
.
Начиная с ES6, в JavaScript есть много полезных дополнений, например Promises, Async/await.
Читайте больше по теме: