Что такое truthy и falsy значения в JavaScript? Приведите примеры.?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Truthy и Falsy значения в JavaScript
в JavaScript не все значения, которые используются в boolean контексте, являются на самом деле true или false. JavaScript превращает значения в boolean по определенным правилам — это truthy (истинные) и falsy (ложные) значения.
Falsy значения (5 штук)
Эти значения превращаются в false при приведении типов:
false— сам boolean false0— число ноль (также-0и+0)''(пустая строка) — пустая строка (также""или backticks)null— отсутствие значенияundefined— переменная не инициализирована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
| Значение | Type | Truthy/Falsy |
|---|---|---|
false | boolean | Falsy |
true | boolean | Truthy |
0 | number | Falsy |
-0 | number | Falsy |
1, -5, 3.14 | number | Truthy |
NaN | number | Falsy |
'' | string | Falsy |
'hello' | string | Truthy |
'0' | string | Truthy |
null | object | Falsy |
undefined | undefined | Falsy |
[] | object | Truthy |
{} | object | Truthy |
() => {} | function | Truthy |
Правило
Эти 6 значений falsy:
false, 0, '', null, undefined, NaN
Всё остальное — truthy. Это очень важно помнить для избежания ошибок в условиях.