«Единственный способ творить великие дела – это любить то, что ты делаешь»
JavaScript

Игра на «Морской Бой» на JavaScript: Простая Игра и Игра для Двоих


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

При этом не упоминалось о булевых значениях. Потому что сначала нужно познакомиться с понятием истинных и ложных значений в JavaScript.

Ложные значения это значения, о которых нельзя сказать, что это false (ложь). Это не совсем так. Но они будут принимать значение false, если пробовать их преобразовать в булевы значения.

Подробнее о ложных и об истинных значениях читайте далее.



Пять ложных значений в JavaScript

В JavaScript существует пять ложных значений. Это ноль 0, пустая строка '', undefined, null и NaN.

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

Что касается false, то это ложь/ложное значение само по себе. Поэтому его нет в списке 5-ти ложных значений.

Все остальное относится к так называемым истинным значениям. Истинные значения это значения, которые будут преобразованы в true. Это любые числа, кроме ноля 0, или любая (не пустая) строка. Все они будут преобразованы в true, если мы попытаемся конвертировать их в логическое значение.

Функция 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 при конвертировании в булев тип данных возвращают false. Далее идет строка 'myName', которая преобразована в true. Это же правило относится к пустому объекту {}. Пустой объект это истинное значение, поэтому здесь мы также видим true. И в конце происходит конвертация пустой строки в булево значение, и мы снова видим false.

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

Но на практике подобные преобразования редко происходят. Функция Boolean очень мало используется.

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

Логический контекст конструкции if else

Итак, на практике преобразование в булев тип данных, то есть в true или false всегда происходит неявно, а НЕ явно, как это было сделано в примере №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 else, выражение if (money) всегда стремится привести любое значение к логическому. Так работает JavaScript. Причем не важно, что будет в условии if (money). JavaScript в любом случае будет пробовать конвертировать это в логическое значение.

    В итоге в условии if-else происходит использование истинного или ложного значения: true или false.

  • 0 (ноль) - это ложное значение. Правильно? Значит в этом логическом контексте, в этом условии: if (money)- это число ноль будет преобразовано в false. Подобно тому, как в первом примере с преобразованиями: Boolean(0) мы получаем false.

  • И так как, в условии мы имеем false, то выполняется блок else, что мы и видим в результате.

Если же переменной money присвоить любое другое, отличное от нуля число, то в условии: if (money) будет true. Соответственно будет выполняться блок 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) мы будем иметь false. А значит в конструкции 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) мы получим true, значит, выполняется блок if и в результате мы видим: "YAY! height is defined".

Пример 3.3 - Нюансы

Рассматриваемый в этом примере код имеет один существенные недостаток: если переменной height присвоить 0 (ноль), то в результате мы увидим "height is undefined". То есть в условии if (height) мы будем иметь false, так как 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 определена.

По сути это является ошибкой в коде. Такого быть не должно. Этот недостаток можно исправить, используя логические операторы. Но об этом речь пойдет немного позже.

В следующей статье речь пойдет об операторах равенства.



Читайте также...



Отзывы и комментарии:

Комментариев нет...

Оставить отзыв:

Ваше Имя:

Текст комментария:

Ответьте на вопрос:

Сколько дней в Високосном году?


НЕ Рунет - Часть 1

Тематические публикации
Популярные заметки
Последние заметки