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