Клавиша / esc

Оператор typeof

Оператор typeof возвращает строку с типом операнда. Как проверить тип данных в JavaScript и что нужно знать о его особенностях

Время чтения: меньше 5 мин

Кратко

Скопировано

Оператор typeof возвращает строку с типом операнда. Это простой способ проверить, с чем мы имеем дело: число, строка, объект или что-то другое.

Пример

Скопировано
Открыть демо в новой вкладке

Как пишется

Скопировано

typeof — это унарный оператор. Это значит, что он применяется к одному операнду и записывается перед ним:

        
          
          typeof выражение// илиtypeof(выражение) // скобки не обязательны
          typeof выражение
// или
typeof(выражение) // скобки не обязательны

        
        
          
        
      

typeof всегда возвращает строку с типом. Вот полный список возможных значений:

  • "number" — для чисел;
  • "string" — для строк;
  • "boolean" — для логических значений (true/false);
  • "undefined" — для undefined;
  • "object" — для null ⚠️ (это баг языка);
  • "object" — для объектов {};
  • "object" — для массивов [];
  • "function" — для функций;
  • "symbol" — для символов;
  • "bigint" — для больших целых чисел.

Как понять

Скопировано

Особенности

Скопировано

Баги

Скопировано

Главная особенность typeof, которую нужно запомнить — typeof null === "object". Это официально признанная ошибка в языке, которая существует с первых версий. Её не исправят, чтобы не сломать существующий код.

Если нужно проверить значение на null, используйте строгое сравнение:

        
          
          value === null
          value === null

        
        
          
        
      

Массивы

Скопировано

Массивы тоже считаются объектами:

        
          
          typeof [1, 2, 3] // "object"
          typeof [1, 2, 3] // "object"

        
        
          
        
      

Чтобы проверить, является ли значение массивом, используйте Array.isArray():

        
          
          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 === null, а не через typeof.
💡 typeof безопасен для необъявленных переменных, в отличие от прямого обращения к ним.
💡 В TypeScript typeof работает на уровне типов и используется совсем иначе — не путайте с оператором JavaScript.
💡 Для проверки на объект можно использовать typeof value === "object" && value !== null, чтобы исключить null.