PassFront
  1. PassFront
  2. База знаний
  3. Основы языка

Какая типизация у языка 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 добавляет статическую проверку типов на компиляции.

Другие вопросы раздела