Назад к вопросам
Junior
72
questionbank

Расскажи о преобразовании типов в JavaScript.

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В JavaScript преобразование типов происходит явно (принудительно) или неявно (автоматически, коэрцизия).

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

  • Явно вызывается разработчиком.
  • Используются встроенные функции или конструкторы: String(), Number(), Boolean(). Parse integer: parseInt(), parse float: parseFloat().
  • Примеры:
// Преобразование в строку
let num = 123;
let str = String(num); // "123"

// Преобразование в число
let strNum = "456";
let number = Number(strNum); // 456

// Преобразование в булево
let emptyStr = "";
let bool = Boolean(emptyStr); // false

Неявное преобразование (Коэрцизия):

  • Происходит автоматически движком JavaScript во время выполнения операций.
  • Случается в операторах (арифметических, сравнения), в условных выражениях, при вызове определенных функций.
  • Примеры:
// Строковое сложение
let result = "10" + 5; // "105" (число 5 преобразуется в строку "5")

// Арифметическая операция
let result2 = "10" - 5; // 5 (строка "10" преобразуется в число 10)

// Сравнение
let result3 = "10" == 10; // true (строка "10" преобразуется в число 10)

// В условном выражении
if ("hello") {
  // Строка "hello" преобразуется в true
}

Правила неявного преобразования:

  • К строке: При сложении строки с любым другим типом, все преобразуется в строку.
  • К числу: В арифметических операциях (кроме сложения со строкой), операциях сравнения (>, <, >=, <=), унарном плюсе +, при вызове математических функций.
  • К булеву: В логических операторах (||, &&, !), в условных выражениях (if, while). "Ложные" значения: false, 0, "", null, undefined, NaN. Все остальное - "истинные".
  • К примитиву: Объекты при необходимости преобразуются в примитивы. Порядок преобразования зависит от контекста (ToPrimitive алгоритм).
// Унарный плюс
let strNum = "123";
let num = +strNum; // 123

// Сравнение объектов
[] == false; // true (оба преобразуются к 0)

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