Перейти к содержимому

Type Coercion (преобразование типов)

В одной фразе: coercion — неявное приведение типов, управляемое алгоритмами ToPrimitive, ToNumber и ToString из спецификации ECMAScript. Собеседование проверяет знание “сюрпризов”: [] + {}, {} + [], "" == false — и умение объяснить их через алгоритм.

// ToPrimitive для объектов: сначала valueOf(), потом toString()
console.log([] + []); // '' — оба → '', конкатенация строк
console.log([] + {}); // '[object Object]'
console.log({} + []); // '[object Object]' (в выражении!)
// НО: {} в начале statement — это блок кода, а не объект:
// {} + [] → +[] → +'' → 0 (в консоли браузера)
// ToNumber: явные правила конвертации
console.log(+'' ); // 0
console.log(+' 3 '); // 3 (пробелы игнорируются)
console.log(+null); // 0
console.log(+undefined); // NaN
console.log(+[]); // 0 ([] → '' → 0)
console.log(+{}); // NaN ({} → '[object Object]' → NaN)
console.log(+true); // 1
console.log(+false); // 0
// Оператор + перегружен: строка поглощает число
console.log(1 + '2'); // '12' (число → строка)
console.log(1 - '2'); // -1 (строка → число; - не перегружен)
console.log(true + true); // 2 (boolean → number)
console.log(null + 1); // 1 (null → 0)
console.log(undefined + 1); // NaN (undefined → NaN)
// Практический вывод: лучше всегда явно: Number(x), String(x), Boolean(x)

Итог: Явное приведение — Number(), String(), Boolean(). Неявное — через операторы по алгоритму ToPrimitive. Знание алгоритма — обязательное требование Senior.