Далее на странице...
В прошлой статье мы говорили о преобразовании и приведении типов. И работали преимущественно со строками и числами.
При этом не упоминалось о булевых значениях. Потому что сначала нужно познакомиться с понятием истинных и ложных значений в JavaScript.
Ложные значения это значения, о которых нельзя сказать, что это false (ложь). Это не совсем так. Но они будут принимать значение , если пробовать их преобразовать в булевы значения.
Подробнее о ложных и об истинных значениях читайте далее.
Пять ложных значений в JavaScript
В JavaScript существует пять ложных значений. Это ноль 0, пустая строка '', undefined, null и NaN.
Итак, любое из этих пяти значений будет преобразовано в , если мы попытаемся конвертировать их в логическое значение. Хотя изначально это не совсем . Но это будет при преобразовании их к булевым значениям. Вот так звучит определение ложных значений в JavaScript.
Что касается
, то это ложь/ложное значение само по себе. Поэтому его нет в списке 5-ти ложных значений.Все остальное относится к так называемым истинным значениям. Истинные значения это значения, которые будут преобразованы в . Это любые числа, кроме ноля 0, или любая (не пустая) строка. Все они будут преобразованы в , если мы попытаемся конвертировать их в логическое значение.
Функция Boolean
Подобно функциям Number и String, которые используются для преобразования в числа и в строки, в JavaScript для конвертации в логические значения существует функция Boolean.
Используем функцию Boolean, чтобы продемонстрировать, как происходит конвертация различных значений в булев тип.
Пример 1.1
console.log(Boolean(0));
console.log(Boolean(undefined));
console.log(Boolean('myName')); //string
console.log(Boolean({})); //empty object
console.log(Boolean('')); //empty string
Результат
false
false
true
true
false
Что мы видим в примере? Ноль 0 и undefined при конвертировании в булев тип данных возвращают . Далее идет строка 'myName', которая преобразована в . Это же правило относится к пустому объекту {}. Пустой объект это истинное значение, поэтому здесь мы также видим . И в конце происходит конвертация пустой строки в булево значение, и мы снова видим .
Это то, что касалось истинных и ложных значений в JavaScript и их преобразования в логический тип данных при помощи функции Boolean.
Но на практике подобные преобразования редко происходят. Функция Boolean очень мало используется.
Переходим к практическим примерам. При этом будет проще понять концепцию истинных и ложных значений в JavaScript.
Логический контекст конструкции if else
Итак, на практике преобразование в булев тип данных, то есть в всегда происходит неявно, а НЕ явно, как это было сделано в примере №1 .
илиИными словами преобразование в булев тип данных это всегда приведение типов, когда JavaScript делает все автоматически и скрытно от нас.
Но когда именно JavaScript выполняет приведение типов к логическим значениям?
Это происходит по двум сценариям. Во-первых, при использовании логических операторов, и, во-вторых, когда ситуация имеет логический контекст: при составлении условий с использованием конструкции if else.
Говорить о логических операторах мы будем немного позже. А сейчас давайте вернемся немного назад к выражениям if else и посмотрим, как приведение типов работает в условиях if else.
Рассмотрим пример, приближенный к реальной жизни: допустим, есть переменная money, которая изначально равна 0 (нулю). Эту переменную можно использовать, чтобы узнать, есть ли у человека деньги или нет.
Пример №2.1
const money = 0;
if (money) {
console.log("Don't spend it all");
} else {
console.log("You should get a job");
}
Результат
You should get a job
Прокомментируем, как этот код работает. Почему в результате мы увидели строку You should get a job (Ты должен найти работу)?
-
Мы знаем, что значением переменной money является число. В данном случае это 0 (ноль).
Также мы знаем, что в логическом контексте и, являясь условием в конструкции , выражение if (money) всегда стремится привести любое значение к логическому. Так работает JavaScript. Причем не важно, что будет в условии if (money). JavaScript в любом случае будет пробовать конвертировать это в логическое значение.
В итоге в условии if-else происходит использование истинного или ложного значения: true или false.
-
0 (ноль) - это ложное значение. Правильно? Значит в этом логическом контексте, в этом условии: if (money)- это число ноль будет преобразовано в . Подобно тому, как в первом примере с преобразованиями: Boolean(0) мы получаем .
-
И так как, в условии мы имеем выполняется блок else, что мы и видим в результате.
, то
Если же переменной money присвоить любое другое, отличное от нуля число, то в условии: if (money) будет . Соответственно будет выполняться блок if и мы увидим строку: Don't spend it all (Не стоит тратить все сразу). Смотрите пример ниже.
Пример №2.2
const money = 50;
if (money) {
console.log("Don't spend it all");
} else {
console.log("You should get a job");
}
Результат
Don't spend it all
Пример использования ложных и истинных значений
Рассмотрим для закрепления еще один пример использования ложных и истинных значений в JavaScript: это проверка является ли переменная неопределенной или же она определена, которая встречается часто на практике.
Пример 3.1
let height;
if (height) {
console.log("YAY! height is defined");
} else {
console.log("height is undefined");
}
Результат
height is undefined
Комментарии к примеру:
-
Мы знаем, что переменная height не определена undefined, потому что здесь: let height; ей не было присвоено какое-либо значение.
-
Из этой статьи известно, что undefined - это ложное значение. Соответственно в условии if (height) мы будем иметь . А значит в конструкции if else выполнятеся блок else. Поэтому в результате мы видим строку "height is undefined".
Пример 3.2
Если же переменной height присвоить какое-либо значение. То мы увидим иной результат.
let height = 123;
if (height) {
console.log("YAY! height is defined");
} else {
console.log("height is undefined");
}
Результат
YAY! height is defined
Переменной height присвоено числовое значение, поэтому в условии if (height) мы получим , значит, выполняется блок if и в результате мы видим: "YAY! height is defined".
Пример 3.3 - Нюансы
Рассматриваемый в этом примере код имеет один существенные недостаток: если переменной height присвоить 0 (ноль), то в результате мы увидим "height is undefined". То есть в условии if (height) мы будем иметь , так как 0 (ноль) заведомо относится к ложным значениям.
let height = 0;
if (height) {
console.log("YAY! height is defined");
} else {
console.log("height is undefined");
}
Результат
height is undefined
Итак, при значении переменной height = 0; мы видим строку "height is undefined", хотя на самом деле переменная height определена.
По сути это является ошибкой в коде. Такого быть не должно. Этот недостаток можно исправить, используя логические операторы. Но об этом речь пойдет немного позже.
В следующей статье речь пойдет об операторах равенства.