Перейти к содержанию

Truthy

В JavaScript есть концепция truthy, согласно которой выражения оцениваются как истинные (true) в определенных ситуациях (например, if условия и логические операторы && ||). Следующие выражения интерпретируются как истинные в JavaScript. Например, любое число, кроме 0.

if (123) {
    // будет интерпретировано как `true`
    console.log('Any number other than 0 is truthy');
}

Все, что не интерпретируется как истинное, называется falsy.

Вот таблица для справки.

Тип переменной Когда это falsy Когда это truthy
boolean false true
string '' (пустая строка) любая другая строка
number 0 NaN любое другое число
null всегда никогда
undefined всегда никогда
Любой объект, включая пустые {},[] никогда всегда

Явное преобразование

Паттерн !!

Как правило, полезно явно указывать, что значение нужно трактовать как boolean и конвертировать его в явный boolean (один из true|false). Вы можете легко конвертировать значения в логические с помощью префикса !!, например !!foo.

Это просто двойное использование !. Первый ! конвертирует значение (в данном примере foo) в логический тип, но переворачивает логику (истинное -!> false, ложное -!> true). Второй ! переворачивает логику еще раз, чтобы соответствовать первоначальному значению (e.g. истинное -!> false -!> true).

Этот паттерн используется во многих случаях, например:

// С переменными
const hasName = !!name;

// С полями объекта
const someObj = {
    hasName: !!name,
};

// или в ReactJS JSX
{
    !!someName && <div>{someName}</div>;
}