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