← Назад к вопросам

Что такое truthy и falsy значения в JavaScript? Приведите примеры.?

1.0 Junior🔥 171 комментариев
#Node.js и JavaScript

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Truthy и Falsy значения в JavaScript

в JavaScript не все значения, которые используются в boolean контексте, являются на самом деле true или false. JavaScript превращает значения в boolean по определенным правилам — это truthy (истинные) и falsy (ложные) значения.

Falsy значения (5 штук)

Эти значения превращаются в false при приведении типов:

  1. false — сам boolean false
  2. 0 — число ноль (также -0 и +0)
  3. '' (пустая строка) — пустая строка (также "" или backticks)
  4. null — отсутствие значения
  5. undefined — переменная не инициализирована
  6. NaN — Not a Number
if (false) console.log('не выведет');
if (0) console.log('не выведет');
if ('') console.log('не выведет');
if (null) console.log('не выведет');
if (undefined) console.log('не выведет');
if (NaN) console.log('не выведет');

Truthy значения (всё остальное)

Всё, что не falsy — это truthy:

if (true) console.log('выведет'); // true
if (1) console.log('выведет'); // любое число кроме 0
if (-5) console.log('выведет');
if ('hello') console.log('выведет'); // любая непустая строка
if ('0') console.log('выведет'); // строка '0' это truthy!
if ([]) console.log('выведет'); // массив это truthy
if ({}) console.log('выведет'); // объект это truthy
if (function(){}) console.log('выведет'); // функция это truthy

Типичные примеры ошибок

// Пустой массив это TRUTHY!
const arr = [];
if (arr) {
  console.log('это выведется, хотя массив пустой!');
}

// Правильно проверять длину
if (arr.length > 0) {
  console.log('массив не пустой');
}

// Пустой объект это TRUTHY!
const obj = {};
if (obj) {
  console.log('это выведется, хотя объект пустой!');
}

// Правильно проверять ключи
if (Object.keys(obj).length > 0) {
  console.log('объект не пустой');
}

// Строка '0' это TRUTHY
const str = '0';
if (str) {
  console.log('выведется! даже хотя строка выглядит как ноль');
}

Операторы сравнения

Оператор == (нестрогое сравнение)

Проводит type coercion — превращает значения в один тип:

0 == false           // true (оба приводятся к 0 и false)
'' == false          // true
null == undefined    // true
0 == ''              // true

// Но:
false == undefined   // false
false == null        // false

Это опасно и приводит к ошибкам. Используй === вместо ==.

Оператор === (строгое сравнение)

Не проводит type coercion — сравнивает без приведения типов:

0 === false          // false (разные типы)
'' === false         // false
null === undefined   // false
0 === ''             // false

Это правильный способ сравнения.

Логические операторы

&& (AND) — возвращает первое falsy или последнее значение

false && 'world'     // false
undefined && 'world' // undefined
'hello' && 'world'   // 'world' (последнее truthy)
5 && 10              // 10
0 && 10              // 0 (первое falsy)

|| (OR) — возвращает первое truthy или последнее значение

false || 'world'     // 'world' (первое truthy)
undefined || null    // null (оба falsy)
'hello' || 'world'   // 'hello' (первое truthy)
0 || 5               // 5
undefined || 0       // 0

?? (Nullish coalescing) — специальный оператор для null/undefined

null ?? 'default'         // 'default'
undefined ?? 'default'    // 'default'
0 ?? 'default'            // 0 (НЕ заменяет falsy, только null/undefined)
'' ?? 'default'           // '' (НЕ заменяет falsy)
false ?? 'default'        // false

Это более точный оператор, чем ||, потому что НЕ путает falsy с null/undefined.

Практические примеры

Проверка на пустую строку:

const name = '';
if (name) {
  console.log('есть имя'); // не выведется
}

if (name !== '') {
  console.log('есть имя'); // выведется только если не пустая
}

Проверка существования значения:

const user = { name: 'John', age: 0 };

// Плохо - age=0 это falsy
if (user.age) {
  console.log('возраст есть'); // не выведется, хотя age=0
}

// Хорошо
if (user.age !== undefined) {
  console.log('возраст есть');
}

Установка значения по умолчанию:

const count = 0;

// Плохо - заменит 0 на 'default'
const result = count || 'default'; // result = 'default'

// Хорошо
const result = count ?? 'default'; // result = 0

Проверка наличия пользователя:

function greet(user) {
  if (user) {
    console.log('Привет, ' + user.name);
  } else {
    console.log('Привет, незнакомец!');
  }
}

Таблица truthy/falsy

ЗначениеTypeTruthy/Falsy
falsebooleanFalsy
truebooleanTruthy
0numberFalsy
-0numberFalsy
1, -5, 3.14numberTruthy
NaNnumberFalsy
''stringFalsy
'hello'stringTruthy
'0'stringTruthy
nullobjectFalsy
undefinedundefinedFalsy
[]objectTruthy
{}objectTruthy
() => {}functionTruthy

Правило

Эти 6 значений falsy:

false, 0, '', null, undefined, NaN

Всё остальное — truthy. Это очень важно помнить для избежания ошибок в условиях.

Что такое truthy и falsy значения в JavaScript? Приведите примеры.? | PrepBro