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

Что в JavaScript является true значением?

2.2 Middle🔥 131 комментариев
#JavaScript Core

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

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

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

Истинные (Truthy) значения в JavaScript

В JavaScript истинным (truthy) считается любое значение, которое при приведении к булевому типу преобразуется в true. Это фундаментальное понятие, которое постоянно используется в условиях, логических операциях и тернарных операторах.

Основные истинные значения

Все следующие значения являются truthy:

1. Непустые строки

Любая строка, содержащая хотя бы один символ (включая пробелы, нули и специальные символы).

if ("Hello") console.log("Truthy!"); // Выполнится
if (" ") console.log("Truthy!");     // Выполнится (пробел - это символ)
if ("0") console.log("Truthy!");     // Выполнится (строка "0", не число)
if ("false") console.log("Truthy!"); // Выполнится (строка "false")

2. Числа, кроме 0 и -0

Все числа, включая отрицательные, дробные и специальные числовые значения (кроме 0).

if (42) console.log("Truthy!");      // Выполнится
if (-1) console.log("Truthy!");      // Выполнится
if (3.14) console.log("Truthy!");    // Выполнится
if (Infinity) console.log("Truthy!"); // Выполнится

3. Объекты и массивы

Любой объект, включая пустые объекты и массивы.

if ({}) console.log("Truthy!");       // Выполнится (пустой объект)
if ([]) console.log("Truthy!");       // Выполнится (пустой массив)
if (new Date()) console.log("Truthy!"); // Выполнится
if (function() {}) console.log("Truthy!"); // Выполнится (функция)

4. Специальные значения

Некоторые "особые" значения, которые могут быть неочевидными:

if (true) console.log("Truthy!");     // Выполнится (булево true)
if (new Boolean(false)) console.log("Truthy!"); // Выполнится (объект)

Ложные (Falsy) значения для контраста

Для полноты картины важно знать ложные (falsy) значения, которых всего 8:

// Все эти значения преобразуются в false
false
0, -0, 0n (BigInt ноль)
"" (пустая строка), '', ``
null
undefined
NaN

Практическое применение

Понимание truthy/falsy значений критически важно для:

Кратких условий

// Вместо if (name !== null && name !== undefined && name !== '')
if (name) {
    console.log(`Привет, ${name}`);
}

Значений по умолчанию

function greet(name) {
    const displayName = name || "Гость"; // Использует первое truthy значение
    console.log(`Привет, ${displayName}`);
}

greet("Анна"); // "Привет, Анна"
greet("");     // "Привет, Гость"
greet(null);   // "Привет, Гость"

Опциональной цепочки и объединения с null

// Современный подход с ?? (nullish coalescing)
const value = userInput ?? "default"; // Использует default только если null/undefined

// В отличие от ||, который сработает на любом falsy значении
const count = 0;
console.log(count || 10); // 10 (потому что 0 - falsy)
console.log(count ?? 10); // 0 (потому что 0 не null/undefined)

Важные нюансы

  1. Объекты всегда truthy, даже если они "пустые":
const obj = {};
if (obj) console.log("Truthy!"); // Всегда выполнится
  1. Массивы всегда truthy, даже пустые:
if ([]) console.log("Массив truthy!"); // Всегда выполнится
  1. Сравнение с использованием == может давать неочевидные результаты из-за неявного приведения типов:
console.log([] == false); // true (пустой массив приводится к строке "", затем к 0)
console.log([] == 0);     // true
console.log(Boolean([]) == false); // false (потому что Boolean([]) === true)

Рекомендации по использованию

  1. Будьте явными в критически важных проверках:
// Лучше явно проверять типы в важных случаях
if (typeof value === 'string' && value.trim() !== '') {
    // Безопасная обработка строки
}
  1. Используйте строгое равенство (===) чтобы избежать неявного приведения:
if (count === 0) { // Явная проверка на 0
    // Обработка нулевого значения
}
  1. Оператор ?? предпочтительнее || когда нужно обрабатывать только null/undefined:
const result = input ?? "default"; // Только для null/undefined

Понимание truthy/falsy значений — это базовый навык JavaScript разработчика, который помогает писать более лаконичный, выразительный и эффективный код, но требует внимательности к деталям и крайним случаям.