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(+'' ); // 0console.log(+' 3 '); // 3 (пробелы игнорируются)console.log(+null); // 0console.log(+undefined); // NaNconsole.log(+[]); // 0 ([] → '' → 0)console.log(+{}); // NaN ({} → '[object Object]' → NaN)console.log(+true); // 1console.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.