Операторы типов

Операторы типов

Технический фундамент типовых проверок

Операторы типов нужны для безопасной работы с внешними данными:

  • typeof эффективен для примитивов и базовых проверок;
  • instanceof проверяет объектную природу через прототипную цепочку;
  • null требует отдельной проверки в объектных сценариях;
  • точный выбор оператора проверки уменьшает runtime-падения.

Типовая валидация — это первый барьер качества на входе в бизнес-логику.

Зачем проверять типы на практике

Данные из формы, API, query-параметров и localStorage часто приходят не в том виде, который ты ожидаешь. Проверка типа помогает раньше отлавливать ошибки и строить безопасные условия.

Ключевой момент: операторы типов нужны не ради "теории", а для защиты от некорректного входа.

Проверь себя: почему вызов строкового метода на числе чаще всего означает пропущенную проверку типа?

typeof - быстрый базовый инструмент

typeof возвращает строку с типом значения.

console.log(typeof 10); // 'number'
console.log(typeof 'hi'); // 'string'
console.log(typeof true); // 'boolean'
console.log(typeof undefined); // 'undefined'
console.log(typeof function () {}); // 'function'
console.log(typeof {}); // 'object'

Смотри, что важно: typeof null возвращает 'object' (историческая особенность).

instanceof - проверка по цепочке прототипов

instanceof проверяет, создан ли объект определенным конструктором.

const now = new Date();
console.log(now instanceof Date); // true

const list = [];
console.log(list instanceof Array); // true

Здесь часто путаются: instanceof подходит для объектов, а не для примитивов (number, string, boolean).

Проверь себя: что покажет 'hello' instanceof String и почему?

Комбинация проверок для надежности

function normalizeName(value) {
  if (typeof value !== 'string') return null;
  const trimmed = value.trim();
  return trimmed === '' ? null : trimmed;
}

Такой шаблон защищает от runtime-ошибок при неожиданных входах.

Мини-сценарий: обработка данных API

function getItemsCount(payload) {
  if (typeof payload !== 'object' || payload === null) return 0;
  if (!Array.isArray(payload.items)) return 0;
  return payload.items.length;
}

Здесь используются сразу typeof, проверка null и проверка массива.

Смотри, что важно: оператор типов должен соответствовать задаче (примитив или объектная структура).

Частые ошибки новичков

  • Полагаться только на typeof для всех кейсов.
  • Забывать отдельную проверку payload !== null.
  • Использовать instanceof для примитивов.
  • Пропускать проверки перед обращением к свойствам.

Анти-провал: сначала реши, что ты проверяешь - примитив или объект, и только потом выбирай typeof/instanceof.

Что будет, если изменить входные данные

В getItemsCount:

  • null -> 0;
  • объект без items -> 0;
  • items не массив -> 0;
  • корректный массив -> его длина.

Это предсказуемое поведение на "грязном" входе, которое особенно важно в интеграциях с внешними API.

Проверь себя: почему безопаснее вернуть 0, чем допустить падение в payload.items.length?

Краткий итог

  • Операторы типов помогают валидировать входные данные до основной логики.
  • typeof удобен для примитивов и базовых проверок.
  • instanceof полезен для объектов и экземпляров классов.
  • Проверка null обязательна в связке с typeof для объектов.
  • Грамотная типовая проверка снижает количество runtime-ошибок в продакшене.