Кратко
СкопированоЛогический или булев тип boolean может принимать лишь истинное (true) и ложное (false) значения. Назван он так в честь Джорджа Буля, одного из основателей математической логики.
Значения этого типа используются в условных выражениях.
Как пишется
СкопированоСоздать булево значение можно несколькими способами.
Первый — явно указать значение, используя ключевые слова true и false:
// «Истина»const truthyValue = true// «Ложь»const falsyValue = false
// «Истина»
const truthyValue = true
// «Ложь»
const falsyValue = false
Второй способ — использовать метод Boolean:
// «Истина»const truthyValue = Boolean(1)// «Ложь»const falsyValue = Boolean('')
// «Истина»
const truthyValue = Boolean(1)
// «Ложь»
const falsyValue = Boolean('')
Как видите, даже значения других типов, например, числовые или строковые, приводятся к булеву типу.
Третий способ — использовать выражения, значениями которых будут «истина» или «ложь» (мы ниже поговорим о таких выражениях подробнее).
Следующие два выражения истинны, потому что 4 действительно меньше 5.
const truthyValue = Boolean(4 < 5)const anotherTruthy = 4 < 5console.log(truthyValue)// trueconsole.log(anotherTruthy)// true
const truthyValue = Boolean(4 < 5)
const anotherTruthy = 4 < 5
console.log(truthyValue)
// true
console.log(anotherTruthy)
// true
Следующие два — ложны, потому что 2 * 2 :
const falsyValue = Boolean(2 * 2 === 5)const anotherFalsy = 2 * 2 === 5console.log(falsyValue)// falseconsole.log(anotherFalsy)// false
const falsyValue = Boolean(2 * 2 === 5)
const anotherFalsy = 2 * 2 === 5
console.log(falsyValue)
// false
console.log(anotherFalsy)
// false
Булевы значения можно использовать в условных выражениях.
const isCorrect = trueif (isCorrect) { // Выполнится эта ветка кода, // потому что оператор if проверяет, // истинно ли выражение в скобках, // и, если да, то выполняет этот код} else { // Эта ветка не выполнится}const isWrong = falseif (isWrong) { // Теперь не выполнится эта ветка, // потому что выражение в скобках ложно} else { // А вот эта — выполнится}
const isCorrect = true
if (isCorrect) {
// Выполнится эта ветка кода,
// потому что оператор if проверяет,
// истинно ли выражение в скобках,
// и, если да, то выполняет этот код
} else {
// Эта ветка не выполнится
}
const isWrong = false
if (isWrong) {
// Теперь не выполнится эта ветка,
// потому что выражение в скобках ложно
} else {
// А вот эта — выполнится
}
Как понять
СкопированоЛогические значения можно воспринимать как ответ на закрытый вопрос — «Да или нет?»
Это понимание позволяет придумывать более подходящие названия для булевых переменных.
Плохое название для логического значения не помогает понять, на какой вопрос отвечает переменная. Например, wait — не очень хорошее название.
А вот переменная с именем should отвечает на более чёткий вопрос «Должен ли процесс подождать ответа за запрос?». А переменная is — на вопрос «Ждёт ли процесс ответа прямо сейчас?»
Обычно логическим переменным дают названия, начинающиеся с английских глаголов is, should, does, can и подобных.
Выражения
СкопированоВыше мы говорили о выражениях, которые можно привести к логическим значениям. В JavaScript такими выражениями часто пользуются, чтобы построить условия.
Булевым выражением в JavaScript может быть что угодно.
Хитрость в том, чтобы знать, какое выражение в какое значение в итоге будет преобразовано. Например, все эти выражения трансформируются в false:
const falsy1 = Boolean(), falsy2 = Boolean(0), falsy3 = Boolean(null), falsy4 = Boolean(''), falsy5 = Boolean(false)
const falsy1 = Boolean(),
falsy2 = Boolean(0),
falsy3 = Boolean(null),
falsy4 = Boolean(''),
falsy5 = Boolean(false)
А все эти — в true:
const truthy1 = Boolean(true), truthy2 = Boolean('true'), truthy3 = Boolean('false'), truthy4 = Boolean('Су Лин'), truthy5 = Boolean([]), truthy6 = Boolean({}), truthy7 = Boolean('0'), truthy8 = Boolean(' ')
const truthy1 = Boolean(true),
truthy2 = Boolean('true'),
truthy3 = Boolean('false'),
truthy4 = Boolean('Су Лин'),
truthy5 = Boolean([]),
truthy6 = Boolean({}),
truthy7 = Boolean('0'),
truthy8 = Boolean(' ')
Обратите внимание, что строка 'false' преобразуется в логическое true. Так происходит потому, что непустая строка в JavaScript считается truthy значением — то есть таким, которое приводится к true.
То же и с пустыми массивом [ и объектом {}. Они считаются truthy значениями, поэтому приводятся к true.
Другой интересный нюанс: '0' превращается в true, как и ' ', потому что это непустая строка.
Обратите внимание на списки truthy и falsy значений в JavaScript.
Сравнить строку с числом
СкопированоВ JavaScript интерпретатор может сам приводить типы, из-за чего мы можем сравнивать разные типы данных друг с другом.
JavaScript многие за это не любят, потому что сравнивая число со строкой, можно наделать ошибок.
Например, если мы сравним:
5 > '4'// true5 > '4 '// true5 > ' 4 '// true5 > '4.'// true
5 > '4'
// true
5 > '4 '
// true
5 > ' 4 '
// true
5 > '4.'
// true
При этом:
5 > '4 .'// false
5 > '4 .'
// false
Дело в том, что JavaScript попытается преобразовать строку в число. Если это получается, то мы сравниваем числа 5 и 4, а если нет, то 5 и NaN (число, любое сравнение с которым всегда false).
Поэтому надо быть аккуратными со сравнениями, когда мы их используем как выражения для логических переменных.
Отрицание
СкопированоЧтобы инвертировать значение логического типа, можно использовать логическое отрицание. Логическое отрицание в JS записывается через унарный оператор !:
const truthy = trueconst falsy = !truthyconsole.log(falsy)// false
const truthy = true
const falsy = !truthy
console.log(falsy)
// false
Оно также используется, чтобы проверять обратные условия. Функция go выполнится, если is.
const isSleeping = falseif (!isSleeping) { goToBed()}
const isSleeping = false
if (!isSleeping) {
goToBed()
}
На практике
Скопированосоветует
Скопировано🛠 Если вызвать двойное отрицание, можно быстро привести любое выражение к логическому типу.
const sum = 2 + 2const truthy = !!sumconsole.log(truthy)// true
const sum = 2 + 2
const truthy = !!sum
console.log(truthy)
// true
Работает это так:
- Первое отрицание приводит значение к отрицательному логическому значению
!sum.- > false - Второе отрицание инвертирует значение
!false.- > true