Ответ
Оператор typeof возвращает строку, указывающую тип переданного операнда. Это полезно для проверки типа переменной во время выполнения.
Основные возвращаемые значения:
typeof 42; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" (историческая ошибка)
typeof {}; // "object"
typeof []; // "object"
typeof function(){}; // "function"
typeof Symbol(); // "symbol"
typeof 42n; // "bigint"
Ключевые особенности и практическое применение:
- Проверка на undefined:
typeof variable === "undefined"— безопасный способ, не вызывающий ReferenceError. - Работа с функциями:
typeof fn === "function"позволяет проверить, является ли переменная вызываемой функцией. - Ограничения:
typeof nullвозвращает"object"— это известный баг языка, сохраняемый для обратной совместимости. Для точной проверки используйтеvariable === null.- Для различения массивов и объектов
typeofнедостаточно — применяйтеArray.isArray()илиinstanceof. - Все объекты (включая экземпляры классов, даты, регулярные выражения) возвращают
"object".
Пример защитного кода:
function safeCall(fn, arg) {
if (typeof fn !== "function") {
throw new TypeError("Expected a function");
}
return fn(arg);
} Ответ 18+ 🔞
А, ну вот, опять про этот typeof заговорили! Ну, типа, оператор такой, который тебе, как попугай, повторяет, что за хуйню ты ему в рот суёшь. Строку возвращает, название типа. Полезная штука, когда ты в коде, как слепой котёнок, на ощупь ползаешь и пытаешься понять, с чем имеешь дело.
Ну, смотри, что он обычно бормочет:
typeof 42; // "number" — ну, цифра, всё ясно.
typeof "hello"; // "string" — строка, не поспоришь.
typeof true; // "boolean" — булево, да или нет.
typeof undefined; // "undefined" — нихуя нет, пустота.
typeof null; // "object" — А ВОТ ТУТ, СУКА, ПИЗДЕЦ! Исторический косяк, который уже не исправить. Просто запомни.
typeof {}; // "object" — ну да, объект.
typeof []; // "object" — А ЭТО УЖЕ ПРИКОЛ! Массив-то тоже объект, так что `typeof` нихуя не различает. Для этого есть `Array.isArray()`.
typeof function(){}; // "function" — функция, можно вызывать.
typeof Symbol(); // "symbol" — символ, экзотика.
typeof 42n; // "bigint" — большое целое, для тех, кому мало обычных циферок.
Где это реально пригождается, а где — хуйня полная:
- Проверить, есть ли вообще переменная.
typeof variable === "undefined"— это святое! Не вызовет ошибку, даже если переменной, блядь, в помине не было. Безопасно, как презерватив. - Убедиться, что тебе функцию подсунули, а не кирпич.
typeof fn === "function"— и можно спокойно вызыватьfn(), не боясь, что всё ебнется. - А вот где он обманывает, как продавец на рынке:
typeof null === "object"— это классика, ёпта! Баг на века. Чтобы точно пойматьnull, бей в лоб:variable === null.- Отличить массив
[]от объекта{}он не может, оба —"object". Тут ужеArray.isArray(arr)в помощь. - Все остальные объекты — даты, регулярки, твои собственные классы — тоже будут
"object". Более тонкую проверку делай черезinstanceof.
Пример, как не сесть в лужу:
function safeCall(fn, arg) {
// Сначала проверь, не пытаются ли тебя, мудака, наебать, подсунув не функцию.
if (typeof fn !== "function") {
throw new TypeError("Expected a function, а ты мне какую-то хуйню подсунул!");
}
// Если дошло сюда, значит fn — функция. Можно вызывать.
return fn(arg);
}
Вот и вся магия. Главное — помни про его приколы с null и массивами, а то будешь потом, как Герасим, «Му-му» говорить, когда код работать не будет.