Оператор typeof: определение типа переменной

👋 Встречайте typeof — ваш детектор типов в JavaScript

Когда код ведёт себя странно, первое, что нужно проверить — тип переменной. Здесь на сцену выходит оператор typeof — простой, но мощный инструмент. Давайте разберёмся, как он работает и где может пригодиться.

console.log(typeof 42);         // "number"
console.log(typeof 'Hello!');   // "string"
console.log(typeof true);       // "boolean"

🔍 Как работает typeof

typeof возвращает строку, указывающую тип значения. Синтаксис элементарный:

typeof переменная;    // Вариант 1  
typeof(переменная);   // Вариант 2 (скобки необязательны)

💡 Совет: Хотя второй вариант похож на вызов функции, typeof — это оператор, а не функция. Скобки нужны только для группировки сложных выражений, например: typeof (x + y).


📜 Таблица возвращаемых значений

Тип Результат typeof Пример
Число "number" typeof 3.14"number"
Строка "string" typeof "text""string"
Булево значение "boolean" typeof true"boolean"
null "object" (исторический баг!) typeof null"object"
undefined "undefined" typeof undefined"undefined"
Функция "function" typeof alert"function"
Объект "object" typeof {name: "Alex"}"object"
Символ (ES6+) "symbol" typeof Symbol()"symbol"

🚨 Особые случаи и подводные камни

1. typeof null === "object" — почему?

Это известный баг с первой версии JavaScript, который нельзя исправить, чтобы не сломать старые сайты.

const maybeNull = null;
console.log(typeof maybeNull);  // "object" (но это не объект!)

🔥 Как проверить на null?
Используйте строгое сравнение:
javascript if (value === null) { ... }

2. Функции — это объекты, но typeof говорит иное

Хотя функции в JS — это объекты, typeof выделяет их отдельно:

function greet() { return "Hi!"; }
console.log(typeof greet);  // "function" (не "object")

🛠 Практическое применение

Проверка на undefined

let notDefined;
if (typeof notDefined === "undefined") {
  console.log("Переменная не определена!");
}

Защита от ошибок

Проверка типа перед использованием:

function safeDivide(a, b) {
  if (typeof a !== "number" || typeof b !== "number") {
    return "Ошибка: нужны числа!";
  }
  return a / b;
}

Динамическая обработка данных

function logType(value) {
  const type = typeof value;
  switch (type) {
    case "string":
      console.log(`Это строка: "${value}"`);
      break;
    case "number":
      console.log(`Число: ${value + 10}`); // Пример вычисления
      break;
    default:
      console.log("Неизвестный тип: " + type);
  }
}

🧪 typeof vs другие проверки

typeof vs instanceof

  • typeof определяет примитивы.
  • instanceof проверяет, принадлежит ли объект классу/конструктору.
const arr = [1, 2, 3];
console.log(typeof arr);      // "object" (не информативно)
console.log(arr instanceof Array);  // true

typeof vs Object.prototype.toString

Для точного определения типа (включая встроенные объекты):

console.log(Object.prototype.toString.call([]));  // "[object Array]"

🌟 Итог

  • typeof — быстрый способ проверить тип примитивов (кроме null).
  • Возвращает строку (например, "number", "string").
  • Особенности:
  • typeof null"object" (баг).
  • typeof function"function".
  • Используйте в связке с другими методами (===, instanceof) для точных проверок.

Теперь вы знаете, как избежать ошибок, связанных с типами, и писать более надёжный код! 🎉

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube