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 |
|---|---|---|
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>}