Skip to content

Latest commit

 

History

History
45 lines (32 loc) · 2.72 KB

truthy.md

File metadata and controls

45 lines (32 loc) · 2.72 KB

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