Какая типизация у языка JavaScript?
Основы языка
JavaScript — язык с динамической и слабой типизацией. Тип определяется в рантайме, а движок активно выполняет неявные приведения типов.
Динамическая типизация
Тип переменной определяется во время выполнения по значению и может меняться:
let x = 5; // number
x = 'text'; // string — без ошибкиНе нужно указывать типы заранее.
Слабая (нестрогая) типизация
JavaScript неявно приводит типы при операциях:
'5' + 1; // '51' — число приведено к строке
'5' - 1; // 4 — строка приведена к числу
true + 1; // 2
[] + {}; // '[object Object]'Это гибко, но порождает неожиданные баги.
Следствия
- Плюсы: гибкость, быстрая разработка.
- Минусы: ошибки типов всплывают в рантайме, неочевидные приведения.
TypeScript
Добавляет статическую типизацию поверх JS: типы проверяются на этапе компиляции, а в рантайме код остаётся обычным динамическим JavaScript.
Как безопаснее
- Строгое сравнение
===вместо==. - TypeScript или JSDoc для проверки типов.
- Явные преобразования (
Number(),String()).
Коротко для собеседования
JavaScript — динамически (тип в рантайме, переменная меняет тип) и слабо (неявные приведения, '5' + 1 === '51') типизированный. Плюс — гибкость, минус — рантайм-ошибки и неочевидные приведения. TypeScript добавляет статическую проверку типов на компиляции.