Условные операторы позволяют проверить некоторое условие и в зависимости от результата проверки выполнить определенные действия. Здесь мы рассмотрим оператор ?: или так называемый тернарный оператор и операцию ??.
Тернарная операция состоит из трех операндов и имеет следующее определение:
[первый операнд - условие] ? [второй операнд] : [третий операнд].
В зависимости от условия в первом операнде тернарная операция возвращает второй или третий операнд. Если условие в первом операнде равно true
,
то возвращается второй операнд; если условие равно false
, то третий. Например:
const a = 1; const b = 2; const result = a < b ? a: b; console.log(result); // 1
Здесь первый операнд представляет следующее условие a < b
.
Если значение константы a
меньше значения константы b
, то возвращается второй операнд -
a
, то есть константа result
будет равна a
.
Если значение константы a
больше или равно значению константы b
, то возвращается третий операнд -
b
, поэтому константа result
будет равна значению b
.
В качестве операндов также могут выступать выражения:
const a = 1; const b = 2; const result = a < b ? a + b : a - b; console.log(result); // 3
В этом примере кода первый операнд представляет то же самое условие, что и в предыдущем примере, однако второй и третий операнды представляют арифметические операции.
Если значение константы a
меньше значения константы b
, то возвращается второй операнд -
a + b
. Соответственно константа result
будет равна сумме a и b.
Если значение константы a
больше или равно значению константы b
, то возвращается третий операнд -
a - b
. Соответственно константа result
будет равна разности a и b.
Оператор ?? (nullish coalescing operator) позволяет проверить значение на null
и undefined
. Он принимает
два операнда:
левый_операнд ?? правый_операнд
Оператор возвращает значение левого операнда, если оно НЕ равно null
и undefined
. Иначе возвращается значение правого операнда. Например:
const result = "hello" ?? "world"; console.log(result); // hello console.log(0 ?? 5); // 0 console.log("" ?? "javascript"); // "" - пустая строка console.log(false ?? true); // false console.log(null ?? "not null"); // not null console.log(undefined ?? "defined"); // defined console.log(null ?? null); // null console.log(undefined ?? undefined); // undefined
Оператор ??
имеет модификацию в виде оператора ??=, который также позволяет проверить значение на null
и undefined
. Он принимает
два операнда:
левый_операнд ??= правый_операнд
Если левый операнд равен null
и undefined
, то ему присваивается значение правого операнда.
Иначе левый операнд сохраняет свое значение. Например:
const message = "Hello JavaScript"; let text = "Hello work!" text ??= message; console.log(text); // Hello work!
Здесь переменная text
не равна null
или undefined
, поэтому она сохраняет свое значение. Обратный пример:
const message = "Hello JavaScript"; let text = null; text ??= message; console.log(text); // Hello JavaScript
Здесь переменная text
равна null, поэтому при посредстве оператора ??=
она получает значение переменной message
.