> Что такое типизация в JavaScript? (JavaScript)

Уровень: junior · Роль: frontend · Категория: Технические вопросы

Компании: Purrweb

Стек: JavaScript

> Пример ответа

Короткий ответ

Типизация в JavaScript - это механизм определения типов данных для переменных, параметров функций и возвращаемых значений. JavaScript - язык с динамической и слабой типизацией: тип переменной определяется автоматически во время выполнения и может меняться. Это даёт гибкость, но требует внимательности, так как ошибки, связанные с типами, проявляются только в рантайме.

Подробное объяснение

В JavaScript типы данных делятся на примитивные (string, number, boolean, null, undefined, symbol, bigint) и ссылочные (object, array, function). Динамическая типизация означает, что переменная не привязана к конкретному типу - одна и та же переменная может сначала хранить число, потом строку, потом объект.

Слабая типизация означает, что JavaScript автоматически выполняет приведение типов при операциях. Например, "5" + 3 даст строку "53", а "5" - 3 даст число 2. Это поведение часто приводит к неожиданным результатам.

Для контроля типов используются операторы typeof (для примитивов) и instanceof (для объектов). Также есть утилитарные методы вроде Array.isArray().

В современной разработке для строгой типизации используют TypeScript или JSDoc-аннотации, но сам JavaScript остаётся динамически типизированным.

На практике

На практике динамическая типизация ускоряет прототипирование, но создаёт риски в больших проектах. Разработчики часто полагаются на соглашения об именовании (например, isActive для boolean) и проверки в рантайме.

Для защиты от ошибок используют:

  • проверки с typeof перед операциями
  • значения по умолчанию для параметров
  • приведение типов через Number(), String(), Boolean()
  • строгие сравнения === и !==

Пример кода

JAVASCRIPT
// Динамическая типизация
let value = 42;
console.log(typeof value); // "number"
value = "hello";
console.log(typeof value); // "string"
// Слабая типизация - неявное приведение
console.log("5" + 3); // "53" (конкатенация строк)
console.log("5" - 3); // 2 (числовое вычитание)
// Проверка типов
function sum(a, b) {
if (typeof a !== "number" || typeof b !== "number") {
throw new TypeError("Оба аргумента должны быть числами");
}
return a + b;
}
// Приведение типов
const num = Number("42"); // 42
const str = String(42); // "42"

Как отвечать на собеседовании

Начни с определения: JavaScript - динамически и слабо типизированный язык. Затем поясни разницу между динамической и статической типизацией, приведи пример смены типа переменной. Упомяни про неявное приведение типов и связанные с ним подводные камни. Если спросят про TypeScript - скажи, что это надстройка, добавляющая статическую типизацию, но не меняющая поведение самого JavaScript.

Что проверяет интервьюер

Интервьюер оценивает:

  • понимание базовых типов данных
  • знание разницы между динамической и статической типизацией
  • осознание проблем слабой типизации
  • умение использовать typeof, instanceof, строгие сравнения
  • знание способов защиты от ошибок типов

Типичные ошибки

  • Путаница между null и undefined - typeof null возвращает "object" (историческая ошибка языка)
  • Использование == вместо === - приводит к неожиданным приведениям
  • Уверенность, что typeof работает для массивов - для массива он вернёт "object"
  • Игнорирование неявного приведения в арифметических операциях
  • Отсутствие проверок типов в функциях, работающих с пользовательским вводом

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью