При работе с условными выражениями (например, операторами if) мы часто думаем в терминах логических значений: значение, которое может быть либо true, либо false. Однако условные выражения JavaScript не настолько строги, чтобы требовать фактического значения типа boolean. Вместо этого условные выражения JavaScript работают на основе истинности значения.

Каждому значению в JavaScript присуща правдивость: оно либо правдиво, либо ложно. Условные выражения в JavaScript заботятся об истинности значения: сюда входят операторы if, а также условия выхода для таких конструкций, как for и while. В более широком смысле, предикатные функции, подобные тем, которые передаются в методы filter и find массивов, также работают на основе истинности. Во всех этих случаях, если предоставленное значение истинно, то условие выполняется, если ложное, то условие не выполняется.

Истинность также говорит вам, какое значение boolean вы получите, когда передадите значение в функцию Boolean: истинное значение дает вам true, ложное значение дает вам false. Вы можете думать о функции Boolean как о способе приведения значения к boolean на основе его истинности.

Неудивительно, что значение типа boolean имеет истинность, которая соответствует его логическому значению: true истинно, а false ложно. Помимо false, в JavaScript есть только пять других ложных значений: число 0, пустая строка, null, undefined и NaN. Все остальные значения в JavaScript верны.

В JavaScript есть некоторые значения, которые люди часто удивляются, узнав, что они на самом деле правдивы. К ним относятся любые строки с ненулевой длиной, включая строки, состоящие только из пробелов, и строковые представления ложных значений. Другие удивительные истинные значения - это пустые массивы и пустые объекты.

Еще одно место, где используется истина, - это когда применяются логические операторы. Сюда входят логический оператор отрицания (то есть !, он же оператор «взрыва»), логические логические операторы (&& и ||) и тернарный оператор (? … :).

Логические логические операторы особенно интересны и дают начало очень распространенному идиоматическому шаблону JavaScript. Операторы && и || вызываются как операторы короткого замыкания, потому что они оценивают свои операнды слева направо и останавливаются на первом значении, которое гарантирует значение выражения.

Например, если вы поставите ИЛИ истинное значение с любым значением, результат будет истиной, поэтому оператор ИЛИ короткого замыкания (||) будет действовать слева направо, пока не найдет истинное значение, а затем остановится («Замыкает» остальную часть выражения) и определяет все выражение как истинное. Если он не находит истинных операндов, то выражение определяется как ложное.

И наоборот, оператор И (&&) будет искать ложное значение слева направо. Как только он его находит, он замыкает остальную часть выражения и определяет все выражение как ложное. Только если каждый операнд истинен, выражение будет определено как истинное.

Особенность операторов короткого замыкания в JavaScript заключается в том, что они не обязательно выдают значение boolean. Вместо этого они производят то значение, которое определяет истинность выражения. Это показано в примере слева: для выражения || крайний левый истинный операнд - это числовое значение 1, поэтому оно становится значением всего выражения. Для выражения && крайний левый ложный операнд - это пустая строка "", поэтому она становится значением выражения.

В случае, если выражение не сокращено (т. Е. Выражение || только с ложными значениями или выражение && только с истинными значениями), то в качестве значения параметра используется последний (крайний правый) операнд. выражение.

Эта функция JavaScript обычно используется в качестве сокращенного синтаксиса для определенных типов условных выражений. Например, оператор || часто используется для установки значений по умолчанию для отсутствующих свойств, необязательных аргументов и других, возможно, ложных значений, как показано ниже:

Подобное использование оператора && несколько реже, но часто используется для включения дополнительных элементов в массивы, объекты и другие структуры. Например, в приведенном ниже примере значение withBar используется в качестве встроенного условия, чтобы контролировать, имеет ли возвращаемое значение свойство bar.

Это работает, потому что false (и фактически все ложные значения) не имеют свойств для копирования оператором распространения объекта (). Это работает с оператором распространения массива по аналогичным причинам.

Другое распространенное место, где встречается такое использование оператора &&, - это в JSX условное включение дочернего элемента:

В этом примере выражение && во второй строке будет оценивать значение showTitle, если showTitle является ложным, а процессор JSX рассматривает все ложные значения как неотрисованные. Если showTitle истинно, тогда выражение оценивается как элемент <h1>...</h1>.

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