Логические операторы являются важными компонентами любого языка программирования, включая JavaScript. Они позволяют разработчикам выражать сложные условия и управлять потоком в своем коде. Среди этих операторов короткое замыкание играет жизненно важную роль в оптимизации выполнения и повышении читабельности кода. В этой статье мы рассмотрим короткое замыкание логических операторов, включая && (И), || (ИЛИ) и нулевой оператор объединения (??) с примерами кода, иллюстрирующими их использование.

Логический оператор И (&&): Логический оператор И, представленный символом &&, возвращает значение true, если оба операнда истинны; в противном случае возвращается ложь. Однако он демонстрирует уникальное поведение, известное как короткое замыкание. Это означает, что если левый операнд оценивается как false, правый операнд вообще не оценивается, что повышает эффективность.

Рассмотрим следующий фрагмент кода:

const x = 5;
const y = 10;

if (x > 0 && y > 0) {
  console.log("Both x and y are positive.");
}

Вывод: поскольку значения x и y больше 0, условие x > 0 && y > 0 оценивается как истинное. Следовательно, вывод будет таким: «И x, и y положительны».

Логический оператор ИЛИ (||): логический оператор ИЛИ, представленный символом ||, возвращает значение true, если хотя бы один из операндов имеет значение true. Подобно логическому оператору И, он также поддерживает короткое замыкание. Если левый операнд оценивается как истина, правый операнд не оценивается, так как общий результат уже будет истинным.

Давайте рассмотрим следующий фрагмент кода:

const isOnline = true;
const isSubscribed = false;

if (isOnline || isSubscribed) {
  console.log("User is either online or subscribed.");
}

Вывод: поскольку isOnline истинно, условие isOnline || isSubscribed оценивается как истинное. Таким образом, вывод будет таким: «Пользователь либо онлайн, либо подписан».

Нулевой оператор объединения (??): представленный в ECMAScript 2020, нулевой оператор объединения (??) обеспечивает краткий способ выбора первого ненулевого значения из списка выражений. Это особенно полезно при работе с нулевыми или неопределенными переменными.

Рассмотрим следующий пример:

const username = getUsername() ?? "Guest";

console.log(`Welcome, ${username}!`);

Вывод: значение username будет результатом функции getUsername(), если только она не вернет null или undefined. В этом случае значение «Гость» будет присвоено username. Вывод будет: «Добро пожаловать, [имя пользователя]!» (где [username] — фактическое значение, возвращаемое функцией getUsername() или «Гостем», если оно равно null или не определено).

Логическое ИЛИ и нулевой оператор объединения (??)

В JavaScript как логический оператор ИЛИ (||), так и нулевой оператор объединения (??) могут использоваться для установки значений по умолчанию при работе с потенциально нулевыми или неопределенными переменными. Однако в их поведении есть тонкая разница, которую важно понять.

Логический оператор ИЛИ (||): Логический оператор ИЛИ (||) выполняет логическое сравнение и возвращает первое истинное значение. При использовании для установки значений по умолчанию он рассматривает ложные значения (null, undefined, false, 0, NaN, «») как «ложные» и возвращает первое обнаруженное истинное значение.

Рассмотрим следующий фрагмент кода:

const value = null || "Default Value";
console.log(value); // Output: "Default Value"

В этом примере, поскольку null является ложным значением, логический оператор ИЛИ оценивает правостороннее значение («Значение по умолчанию») и присваивает его value.

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

Давайте рассмотрим следующий фрагмент кода:

const value = null ?? "Default Value";
console.log(value); // Output: null

В этом случае, поскольку null является нулевым значением, оператор объединения с нулевым значением игнорирует его и присваивает правостороннее значение («Значение по умолчанию») value.

Ключевое различие между двумя операторами становится более очевидным при работе с ложными значениями, отличными от null и undefined.

Рассмотрим следующий пример:

const falseValue = false;
const emptyString = "";

const result1 = falseValue || "Default Value";
const result2 = emptyString || "Default Value";

console.log(result1); // Output: "Default Value"
console.log(result2); // Output: "Default Value"

const result3 = falseValue ?? "Default Value";
const result4 = emptyString ?? "Default Value";

console.log(result3); // Output: false
console.log(result4); // Output: ""

В этом сценарии логический оператор ИЛИ возвращает правостороннее значение («Значение по умолчанию») даже при обнаружении ложных значений, отличных от null или undefined. С другой стороны, нулевой оператор объединения рассматривает только нулевые значения и возвращает первое ненулевое значение, сохраняя ложные значения, такие как false и "".

Понимание короткого замыкания логических операторов в JavaScript может значительно повысить эффективность и удобочитаемость кода. Оператор && закорачивается, когда левый операнд ложен, а оператор || оператор замыкается, когда левый операнд истинен. Кроме того, нулевой оператор объединения (??) предоставляет удобный способ обработки нулевых или неопределенных значений.

Используя эти операторы и их возможности сокращения, разработчики могут писать более чистый и эффективный код. Знание этих нюансов позволяет программистам JavaScript создавать надежные и производительные приложения.

Помните, что овладение логическими операторами и коротким замыканием имеет решающее значение для любого разработчика JavaScript, стремящегося писать лаконичный и эффективный код.

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .