JavaScript має концепцію "істинності" (truthy
), тобто речей, які оцінюються як true
в певних контекстах (наприклад, в умовах оператора if
та логічних операторах &&
та ||
). Наступні речі є істинними в JavaScript. Наприклад, будь-яке число, крім 0
, наприклад:
if (123) { // Will be treated like `true`
console.log('Any number other than 0 is truthy');
}
Те, що не є істиною (truthy), зветься хибним (falsy).
Ось зручна таблиця для вашої довідки:
Значення | falsy | truthy |
---|---|---|
boolean |
false |
true |
string |
'' (empty string) |
будь-який string |
number |
0 NaN |
будь-який number |
null |
завжди | ніколи |
undefined |
завжди | ніколи |
Будь-який Object, в тому числі порожній {} ,[] |
ніколи | завжди |
Шаблон !!:
Досить часто буває корисно чітко вказати, що ви хочете розглядати значення як boolean
і перетворити його в правильне булеве значення (одне з true
|false
). Ви можете легко перетворити значення на істинний булевий вираз, додавши до нього префікс !!
, наприклад !!foo
. Просто !
використовується двічі. Перший !
перетворює змінну (у цьому випадку foo
) на булеве значення, але інвертує логіку (truthy -!
> false
, falsy -!
> true
). Другий перемикає її знову, щоб відповідати природі початкового об'єкта (наприклад, truthy -!
> false
-!
> true
).
Цей шаблон часто використовується в багатьох місцях, наприклад:
// Direct variables
const hasName = !!name;
// As members of objects
const someObj = {
hasName: !!name
}
// e.g. in ReactJS JSX
{!!someName && <div>{someName}</div>}