Оператор 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) для точных проверок.
Теперь вы знаете, как избежать ошибок, связанных с типами, и писать более надёжный код! 🎉