Проверяет понимание динамической типизации JavaScript и поведения при передаче строки вместо числа в скомпилированном приложении.
JavaScript — язык с динамической типизацией. Это значит, что переменные не имеют фиксированного типа, и проверка типов происходит во время выполнения, а не до него. Термин «скомпилированное приложение» в контексте JavaScript обычно означает, что код был минифицирован или транспилирован (например, с помощью Babel), но это не добавляет статической проверки типов. Поэтому передача строки вместо числа не вызовет ошибку на этапе сборки.
Когда строка используется в арифметической операции, JavaScript применяет неявное преобразование (type coercion). Например, если ожидается число, а приходит строка '5', то операция сложения с числом может привести к конкатенации строк, а не к сложению. Если строка не может быть преобразована в число, результатом будет NaN (Not-a-Number). В некоторых случаях, например при вызове функции, которая ожидает число, но получает строку, может возникнуть ошибка TypeError, но только в момент вызова.
function add(a, b) {
return a + b;
}
console.log(add(2, '3')); // '23' — конкатенация, а не 5
console.log(add(2, 'abc')); // '2abc' — тоже конкатенация
function multiply(a, b) {
return a * b;
}
console.log(multiply(2, '3')); // 6 — строка преобразуется в число
console.log(multiply(2, 'abc')); // NaN — не удалось преобразовать
В первом примере оператор + перегружен: если один из операндов строка, он выполняет конкатенацию. Во втором примере оператор * ожидает числа, поэтому строка преобразуется, и если это невозможно, получаем NaN.
Для строгой проверки типов можно использовать TypeScript, который добавляет статическую типизацию и выявляет такие ошибки на этапе разработки. Также полезно явно преобразовывать значения с помощью Number() или parseInt() и проверять результат на NaN.
В JavaScript передача строки вместо числа не вызывает ошибок компиляции, но может привести к неожиданному поведению во время выполнения. Чтобы избежать этого, используйте строгую типизацию (TypeScript) или явные проверки и преобразования типов.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию