Тип Boolean, логические операторы и операторы сравнения

Логический тип Boolean в JavaScript представляет одно из двух значений: true (истина) или false (ложь).

Значения Boolean

В программировании очень часто бывают ситуации, когда требуется тип данных, который может принимать одно значение из двух, вроде

  • ДА / НЕТ
  • ВКЛ / ВЫКЛ
  • ИСТИНА / ЛОЖЬ

Именно для этих случаев в JavaScript существует логический тип данных Boolean, который может принимать только значение true (истина) или false (ложь).

Функция Boolean()

Чтобы определить, является ли выражение (или переменная) истиной (возвращает значение true), можно воспользоваться функцией Boolean():


Boolean(10 > 9)        // возвращает true 

Или можно сделать еще проще:


(10 > 9)              // также возвращает true
10 > 9                // также возвращает true 

Все имеет "значение" True или False

Любое значение отличное от 0 имеет логическое значение true.


// следующие выражения возвращают true
Boolean(100)
Boolean( 3.14)
Boolean(-15)
Boolean("Hello")
Boolean("false")
Boolean(7 + 1 + 3.14)

Логическое значение 0 (ноль) — false.


var x = 0;
Boolean(x);       // возвращает false 

Логическое значение -0 (минус ноль) — false.


var x = -0;
Boolean(x);       // возвращает false 

Логическое значение "" (пустая строка) — false.


var x = "";
Boolean(x);      // возвращает false 

Логическое значение undefined — false.


var x;
Boolean(x);       // возвращает false 

Логическое значение null — false.


var x = null;
Boolean(x);       // возвращает false 

Логическое значение false — false.


var x = false;
Boolean(x);       // возвращает false 

Логическое значение NaN — false.


var x = 10 / "H";
Boolean(x);       // возвращает false 

Значения типа Boolean могут быть объектами

Обычно, логические значения типа Boolean определяются примитивными литералами:


var x = false;

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


var y = new Boolean(false);

Пример:


var x = false;
var y = new Boolean(false);

// typeof x вернет тип boolean
// typeof y вернет тип object 

Тем не менее, не определяйте значения типа Boolean как объекты. Это замедляет скорость выполнения скрипта. Кроме этого, ключевое слово new в данном случае усложняет код и может привести к неожиданным результатам:

При использовании оператора сравнения ==, одинаковые значения типа Boolean равны:


var x = false;             
var y = new Boolean(false);

// (x == y) будет истинным (true), потому что x и y имеют равные значения 

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


var x = false;             
var y = new Boolean(false);

// (x === y) будет ложным (false), потому что x и y не равны по типу (boolean и object)

Или еще хуже. Объекты не сравниваются:


var x = new Boolean(false);
var y = new Boolean(false);

// (x == y) - false, потому что x и y разные объекты

Обратите внимание на разницу между (x==y) и (x===y).

Сравнение двух объектов JavaScript всегда возвращает ложь (false).

Логические операторы и операторы сравнения

Логические операторы и операторы сравнения используются для проверки выражений и переменных на соответствие какому-либо условию.

Значения типа Boolean лежат в основе всех сравнений и условий в JavaScript.

Операторы сравнения

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

Предположим, что у нас есть x = 5. Следующая таблица объясняет операторы сравнения:

Оператор Описание Выражение Возвращает
== равно x == 8
x == 5
x == "5"
false
true
true
=== равно по значению и типу x === 5
x === "5"
true
false
!= не равно x != 8 true
!== не равно ни по значению, ни по типу x !== 8
x !== 5
x !== "5"
true
false
true
> больше чем x > 8 false
< меньше чем x < 8 true
>= больше или равно x >= 8 false
<= меньше или равно x <= 8 true

Как это можно использовать

Операторы сравнения используются в выражениях условий для сравнения значений и принятия решения в зависимости от полученного результата:


if (age < 18) text = "Слишком молод"; 

Подробнее об условных выражениях будет рассказано в следующей главе этого учебника.

Логические операторы

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

Предположим, у нас есть x = 6 и y = 3. Следующая таблица объясняет логические операторы:

Оператор Описание Пример
&& И (x < 10 && y > 1) - true
|| ИЛИ (x == 5 || y == 5) - false
! НЕ !(x == y) - true
Оператор ! также используется для быстрого преобразования выражения к логическому значению:


!!"string" = true
!!null = false

Условный (тернарный) оператор

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

Синтаксис:


имя_переменной = (условие) ? значение1 : значение2

Пример:


var voteable = (age < 18) ? "Слишком молод" : "Возраст подходит"; 

В данном примере если в переменной age значение меньше 18, то переменной voteable будет присвоена строка "Слишком молод", в обратном случае переменной voteable будет присвоена строка "Возраст подходит".

Сравнение разных типов

Сравнение данных разного типа может привести к неожиданным результатам.

При сравнении строки и числа JavaScript будет преобразовывать строку в числовое значение. Пустая строка преобразуется в 0. Не числовая строка преобразуется в значение NaN, которое всегда равно false.

Выражение Значение
2 < 12 true
2 < "12" true
2 < "John" false
2 > "John" false
2 == "John" false
"2" < "12" false
"2" > "12" true
"2" == "12" false

При сравнении двух строк значение строки "2" будет больше значения строки "12", потому что в алфавитной последовательности 1 меньше 2.

Чтобы обезопасить результаты сравнения, переменные следует привести к надлежащему типу:


age = Number(age);
if (isNaN(age)) {
    voteable = "Введенное значение не является числом";
} else {
    voteable = (age < 18) ? "Слишком молод":"Возраст подходит"; 
}