Если вы просмотрите код JavaScript, вы можете найти выражение, в котором используется двойной вопросительный знак (??), как в следующем коде:

Двойной вопросительный знак — это логический оператор, который возвращает выражение справа от запроса, если выражение перевернуто влево и имеет значение null или undefined.

Этот оператор также известен как нулевой оператор слияния. Это новая функция, представленная в JavaScript ES2020, которая позволяет более точно искать значения null или неопределенные.

Синтаксис нулевого оператора объединения

Синтаксис нулевого оператора объединения очень прост. Он содержит два вопросительных знака ??, помещенных между двумя выражениями.

Вот пример:

let firstName = null;
let username = firstName ?? "Guest";
console.log(username); // "Guest"

Приведенный выше код присваивает значение переменной firstName значению переменной username.

Если значение firstName равно нулю или неопределенному, будет присвоено значение Guest:

Можно написать и так:

let username = undefined ?? "Guest";
console.log(username); // "Guest"

Как видите, оператор if-else не требуется для проверки значений null или неопределенных.

Зачем JavaScript нужен этот оператор?

Оператор объединения значений NULL был создан как улучшенная альтернатива оператору OR ||.

Оператор OR изначально был создан для предоставления значения по умолчанию или резервного варианта, когда выражение l, основанное на левой стороне, имеет значение false или возвращает false.

Но после некоторой практики становится ясно, что бывают случаи, когда разработчики хотят возвращать значения, которые считаются как ложными, так и действительными, например 0 и пустую строку (“ ”).

Использование оператора OR предотвращает возврат неверных значений. Рассмотрим следующий пример:

// empty string evaluates to false in JavaScript:
let firstName = "";
let username = firstName ?? "Guest";
console.log(username); // ""

// When you use OR operator:
username = firstName || "Guest";
console.log(username); // "Guest"

При использовании оператора нулевого объединения только ровно нулевые и неопределенные значения заменяются значением справа от него.

Оператор нулевого объединения можно использовать со значениями любого типа, включая числа, строки и объекты.

Несколько вариантов использования нулевого оператора объединения

Нулевой оператор объединения полезен в нескольких ситуациях, когда вам необходимо проверить следующее: null or undefined значения и предоставить шаблон.

Найдите несколько примеров

Обработка отсутствующих аргументов функции

Когда Когда При вызове функции некоторые аргументы могут быть опущены.

Нулевой оператор объединения можно использовать для предоставления значений по умолчанию для отсутствующего аргумента, например:

function greet(name) {
  console.log(`Hello, ${name ?? "Guest"}!`);
}

greet(); // 'Hello, Guest!'
greet("John"); // 'Hello, John!'

Доступ к свойствам объекта

Когда Когда Когда при работе с объектами свойство может не существовать или иметь значение undefined.

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

let user = { name: "John Doe" };
let email = user.email ?? "N/A";
console.log(email); // 'N/A'

Выбор между переменной и константой

Вы можете выбрать значение переменной или константы, если переменная null или undefined:

let value = null;
const defaultValue = 'Default';

let result = value ?? defaultValue;

console.log(result); // 'Default'

Нравится, когда вы видите нулевой оператор объединения, это классная функция, которая может сделать ваш код более кратким и надежным.

С использованием ?? с || и операторы &&

По соображениям безопасности двойной вопросительный знак нельзя использовать вместе с JavaScript OR (||) и AND (&& ). без круглых скобок (), разделяющих операторы.

Например, следующий код пытается проверить, может ли переменная имя или фамилия использоваться в качестве значения имени пользователя, прежде чем использовать «гость» в качестве значения:

let firstName = "John";
let lastName = "Stone";
let username = firstName || lastName ?? "Guest";
// Error: Unexpected token '??'

console.log(username);

Это связано с тем, что JavaScript не может определить, какой оператор выполнять первым. Для уточнения приоритета голосов использование скобок обязательно.

Следующий код оценивает выражения перед скобками:

let firstName = null;
let lastName = undefined;
let username = (firstName || lastName) ?? "Guest";

console.log(username); // "Guest"

Это как если бы оператор объединения null был объединен с оператором AND или OR.

Заключение

Двойной вопросительный знак JavaScript также известен как Оператор нулевого объединения. Это логический оператор, который просто возвращает выражение справа, если выражение слева имеет значение NULL или неопределенное.

Нулевой оператор объединения — это расширенный оператор ИЛИ, который позволяет возвращать 0 и пустую строку «» в качестве допустимых значений для вашего приложения.

В этом разделе также будут показаны некоторые примеры использования нулевого оператора объединения.