truthy.md

May 8, 2020 · View on GitHub

Truthy

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

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

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

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

Тип переменнойКогда это falsyКогда это truthy
booleanfalsetrue
string'' (пустая строка)любая другая строка
number0 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>}