Логическое (или булевое) значение - это примитивный тип данных, который может содержать в себе true или false (истина или ложь). JavaScript использует приведение типа, чтобы привести значение к true\false. Есть явные и скрытые методы преобразования значений в их логические аналоги.
В этой статье мы поговорим о "истинных" и "ложных" значениях, а также о том, как преобразовать обычные значения в логические в JavaScript.
Шпаргалка по “инстинным” и “ложным” значениям в JavaScript
Boolean(false); // false
Boolean(undefined); // false
Boolean(null); // false
Boolean(''); // false
Boolean(NaN); // false
Boolean(0); // false
Boolean(-0); // false
Boolean(0n); // false
Boolean(true); // true
Boolean('hi'); // true
Boolean(1); // true
Boolean([]); // true
Boolean([0]); // true
Boolean([1]); // true
Boolean({}); // true
Boolean({ a: 1 }); // true
Эта шпаргалка - отличная иллюстрация того, какие значение в JavaScript конвертируются как “истинные” или “ложные”.
Выше мы говорили про разницу между явным и скрытым приведением, давайте посмотрим на разницу между ними.
Скрытое приведение инициируется движком JavaScript и происходит автоматически. Явное же приведение наоборот - происходит в “ручном режиме” с использованием встроенных способов JavaScript - оператора !!
и функции Boolean()
.
Оператор !!
!!value
Думаю, вы уже знакомы с логическим оператором "НЕ” - !
. Так вот оператор !!
действует следующим образом: первый знак !
приводит значение к логическому и инвертирует его. Например, !true
равняется false
. Второй оператор !
снова инвертирует полученное значение. В нашем примере !false
приравнивается к true
.
В целом, лучше исопльзовать этот способ, так как у него лучше производительность. Единственное “но” при его использовании - низкая читабельность такого кода. Однако эта проблема возникает только в том случае, если другие разработчики не знакомы с тем, как работает этот оператор.
const value = 'Строчка истины'
!!value // true
Рассмотрим процесс поподробнее:
const value = 'Строчка истины'
!value // false
!!value // true
Ниже - примеры работы оператора !!
со значениями из нашей шпаргалки:
// Ложные значения
!!'' // false
!!false // false
!!null // false
!!undefined // false
!!0 // false
!!NaN // false
// Истинные значения
!![] // true
!!"false" // true
!!true // true
!!1 // true
!!{} // true
Функция Boolean()
Boolean(value)
Boolean()
- это глобальная функция, которая конвертирует значение, переданное в него, в логическое.
Не стоит использовать его с ключевым словом new
(new Boolean
), т.к. это создает сущность Boolean, которая является объектом. Ниже - пример правильного использования этой функции:
const value = 'Строчка правды'
Boolean(value) //true
Если кратко
В JavaScript есть два явных способа приведения значения к логическому.
1. !!
!!value
2. Boolean()
Boolean(value)
const finalThoughts = "Спасибо за прочтению! Надеюсь кому-то это будет полезно."
!!finalThoughts // true
Boolean(finalThoughts) // true
Комментарии (3)
eandr_67
25.05.2022 11:08Зачем переводить очередной опус, содержащий в точности тоже самое, что и множество уже опубликованных на Хабре статей и напечатанных учебников JavaScript? Да ещё и пытающийся убедить читателя, что говнокод — это хорошо.
Всё, что снижает читабельность и/или надёжность промышленного кода — говнокод (полагаться на автоматическое приведение типов — безусловное снижение надёжности кода). Это в пет-проектах можно предлагаемым автором трюкачеством заниматься, а в качественном хорошо читаемом коде для получения логических значений будут использоваться не ‼ и Boolean(), а === и !== — о которых в статье вообще не упоминается.
miscusi
25.05.2022 11:29проще всего не использовать приведение типов, а сравнивать через === (кроме булевых значений если рассматриваем ts)
единственное исключение это null == undefined
realise
Удивительное рядом. 3 года не заходил на хабр. А тут по-прежнему постят документацию по яваскрипту. Печаль (