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

Что будет при преобразовании true или false в число?

1.3 Junior🔥 191 комментариев
#JavaScript Core

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

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

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

Преобразование логических значений true и false в число

В JavaScript при преобразовании логических значений true и false к числовому типу действуют следующие правила:

  • true преобразуется в 1
  • false преобразуется в 0

Это поведение определено спецификацией ECMAScript и является частью стандартного процесса абстрактной операции ToNumber, которая применяется при явном или неявном приведении типов.

Явное и неявное преобразование

Явное преобразование

// Использование конструктора Number()
console.log(Number(true));  // 1
console.log(Number(false)); // 0

// Унарный плюс
console.log(+true);   // 1
console.log(+false);  // 0

// Функция parseInt() (менее предпочтительный способ)
console.log(parseInt(true));  // NaN (особенность parseInt)
console.log(parseInt(false)); // NaN

Неявное преобразование

// В арифметических операциях
console.log(true + 5);    // 6 (1 + 5)
console.log(false * 10);  // 0 (0 * 10)
console.log(true - false); // 1 (1 - 0)

// При сравнении
console.log(true > 0.5);   // true (1 > 0.5)
console.log(false == 0);   // true (0 == 0)
console.log(true === 1);   // false (разные типы!)

Особенности преобразования в разных контекстах

В логических операциях

// Логические операторы возвращают исходные значения,
// но при использовании в числовом контексте происходит преобразование
let result = true && 5;  // 5 (не преобразуется к числу здесь)
console.log(result + 2); // 7 (преобразование происходит при сложении)

С тернарным оператором

let value = true ? 10 : 20;  // 10
let numericValue = +value;   // 10 (явное преобразование)

let boolValue = false ? 10 : 20;  // 20
console.log(boolValue / 2);  // 10 (неявное преобразование false → 0, затем 20 / 2)

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

Подсчет количества true значений в массиве

const boolArray = [true, false, true, true, false];

// Способ 1: Использование reduce
const count1 = boolArray.reduce((acc, val) => acc + Number(val), 0);
console.log(count1); // 3

// Способ 2: Неявное преобразование
const count2 = boolArray.reduce((acc, val) => acc + val, 0);
console.log(count2); // 3 (true становится 1, false становится 0)

Работа с флагами и битовыми операциями

// Преобразование логических флагов в битовую маску
const READ = true;    // 1 в битовом представлении (001)
const WRITE = false;  // 0 (000)
const EXECUTE = true; // 1 (100)

// Создание битовой маски
let permissions = (READ << 2) | (WRITE << 1) | EXECUTE;
console.log(permissions); // 5 (101 в двоичной)

Нюансы и подводные камни

Сравнение с использованием == и ===

console.log(true == 1);     // true (после преобразования типов)
console.log(true === 1);    // false (строгое сравнение без преобразования)
console.log(false == 0);    // true
console.log(false === 0);   // false

Особенности с другими преобразованиями

console.log(true + true);           // 2 (1 + 1)
console.log(true + false);          // 1 (1 + 0)
console.log(true + " текст");       // "true текст" (конкатенация строк)
console.log(false + " текст");      // "false текст"
console.log(Number("true"));        // NaN (строки "true"/"false" не преобразуются в числа)

Внутренняя логика преобразования

Процесс преобразования следует этим шагам:

  1. Для true → внутреннее числовое значение 1
  2. Для false → внутреннее числовое значение 0
  3. Это преобразование происходит при вызове абстрактной операции ToNumber согласно спецификации ECMAScript

Такое поведение согласуется с многими другими языками программирования (C, C++, Java), где логические значения часто представляются как 1 и 0, что обеспечивает предсказуемость и удобство при математических операциях с логическими флагами.

Понимание этого преобразования критически важно для написания корректного кода, особенно при работе с условными операторами, математическими вычислениями и оптимизации производительности, когда логические значения могут использоваться в числовых контекстах.

Что будет при преобразовании true или false в число? | PrepBro