Оператор typeof: определение типа переменной: урок по | УчисьЧтобыЛетать

Оператор 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) для точных проверок.

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

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

🌱 Занятия по программированию

Живые онлайн-занятия по программированию с репетитором для детей, подростков и взрослых.

Личный подход, без воды, с фокусом на понимание и реальные проекты.

🚀 Записаться на занятие