Логическое (или булевое) значение - это примитивный тип данных, который может содержать в себе 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)


  1. realise
    25.05.2022 10:41
    +2

    Удивительное рядом. 3 года не заходил на хабр. А тут по-прежнему постят документацию по яваскрипту. Печаль (


  1. eandr_67
    25.05.2022 11:08

    Зачем переводить очередной опус, содержащий в точности тоже самое, что и множество уже опубликованных на Хабре статей и напечатанных учебников JavaScript? Да ещё и пытающийся убедить читателя, что говнокод — это хорошо.

    Всё, что снижает читабельность и/или надёжность промышленного кода — говнокод (полагаться на автоматическое приведение типов — безусловное снижение надёжности кода). Это в пет-проектах можно предлагаемым автором трюкачеством заниматься, а в качественном хорошо читаемом коде для получения логических значений будут использоваться не ‼ и Boolean(), а === и !== — о которых в статье вообще не упоминается.


  1. miscusi
    25.05.2022 11:29

    проще всего не использовать приведение типов, а сравнивать через === (кроме булевых значений если рассматриваем ts)

    единственное исключение это null == undefined