Кратко
СкопированоОператор typeof возвращает строку с типом операнда. Это простой способ проверить, с чем мы имеем дело: число, строка, объект или что-то другое.
Пример
СкопированоКак пишется
Скопированоtypeof — это унарный оператор. Это значит, что он применяется к одному операнду и записывается перед ним:
typeof выражение// илиtypeof(выражение) // скобки не обязательны
typeof выражение
// или
typeof(выражение) // скобки не обязательны
typeof всегда возвращает строку с типом. Вот полный список возможных значений:
"number"— для чисел;"string"— для строк;"boolean"— для логических значений (true/false);"undefined"— для undefined;"object"— дляnull⚠️ (это баг языка);"object"— для объектов{};"object"— для массивов[;] "function"— для функций;"symbol"— для символов;"bigint"— для больших целых чисел.
Как понять
СкопированоОсобенности
СкопированоБаги
СкопированоГлавная особенность typeof, которую нужно запомнить — typeof null . Это официально признанная ошибка в языке, которая существует с первых версий. Её не исправят, чтобы не сломать существующий код.
Если нужно проверить значение на null, используйте строгое сравнение:
value === null
value === null
Массивы
СкопированоМассивы тоже считаются объектами:
typeof [1, 2, 3] // "object"
typeof [1, 2, 3] // "object"
Чтобы проверить, является ли значение массивом, используйте Array:
Array.isArray([1, 2, 3]) // true
Array.isArray([1, 2, 3]) // true
Когда использовать
СкопированоБазовая проверка типа
СкопированоСамый частый сценарий — проверка, что переменная существует и имеет нужный тип:
function greet(name) { if (typeof name === "string") { console.log(`Привет, ${name}!`) } else { console.log("Привет, незнакомец!") }}
function greet(name) {
if (typeof name === "string") {
console.log(`Привет, ${name}!`)
} else {
console.log("Привет, незнакомец!")
}
}
Проверка на undefined
СкопированоПроверка, определена ли переменная:
if (typeof something === "undefined") { console.log("Переменная не определена")}
if (typeof something === "undefined") {
console.log("Переменная не определена")
}
Важно: если переменная вообще не объявлена, typeof не выбросит ошибку, а вернёт "undefined". Это одно из редких мест в JavaScript, где можно безопасно обратиться к несуществующей переменной.
typeof notDeclared // "undefined"notDeclared // ReferenceError
typeof notDeclared // "undefined"
notDeclared // ReferenceError
Проверка на функцию
СкопированоЭто удобно, когда вы ожидаете колбэк:
function doSomething(callback) { if (typeof callback === "function") { callback() }}
function doSomething(callback) {
if (typeof callback === "function") {
callback()
}
}
Чего не умеет typeof
Скопированоtypeof различает только примитивные типы и несколько специальных случаев. Он не поможет:
- Отличить массив от объекта;
- Отличить дату от обычного объекта;
- Отличить регулярное выражение от объекта;
- Проверить, является ли значение экземпляром класса.
Для таких проверок используйте instanceof или специальные методы:
const date = new Date()date instanceof Date // trueArray.isArray([]) // true
const date = new Date()
date instanceof Date // true
Array.isArray([]) // true
Подсказки
Скопировано💡 Проверка на null делается через строгое сравнение: value , а не через typeof.
💡 typeof безопасен для необъявленных переменных, в отличие от прямого обращения к ним.
💡 В TypeScript typeof работает на уровне типов и используется совсем иначе — не путайте с оператором JavaScript.
💡 Для проверки на объект можно использовать typeof value , чтобы исключить null.