Typeof: примеры (JAVASCRIPT)

Оператор typeof в языке JavaScript: примеры и описание
Раздел: Языковые конструкции, Операторы
typeof(operand: any): string

Оператор typeof в JavaScript

Оператор typeof возвращает строку, указывающую тип операнда. Его используют для проверки типа данных переменной, выражения или литерала. Это унарный оператор, который размещают перед своим единственным операндом.

Возможные возвращаемые значения:

  • "undefined" — значение не определено.
  • "boolean" — логический тип.
  • "number" — числовой тип (включая NaN и Infinity).
  • "string" — строковый тип.
  • "bigint" — тип для больших целых чисел.
  • "symbol" — тип символ (ES6).
  • "function" — функциональный объект (хотя функции являются объектами).
  • "object" — объект (включая null и массивы).

Оператор полезен для динамической проверки типов в нетипизированном языке.

Базовые примеры применения typeof

Простые случаи использования оператора:

console.log(typeof 42);
"number"
console.log(typeof 'строка');
"string"
console.log(typeof true);
"boolean"
console.log(typeof undefined);
"undefined"
console.log(typeof null);
"object"
console.log(typeof {a: 1});
"object"
console.log(typeof [1, 2, 3]);
"object"
console.log(typeof function() {});
"function"
console.log(typeof Symbol('id'));
"symbol"
console.log(typeof 9007199254740991n);
"bigint"

Альтернативные методы проверки типов в JavaScript

В JavaScript существуют другие способы определения типа данных:

  • instanceof — проверяет принадлежность объекта к классу или конструктору. Работает с объектами и не подходит для примитивов.
    [] instanceof Array
    true
  • Array.isArray() — надежный метод для проверки массивов.
    Array.isArray([])
    true
  • Object.prototype.toString.call() — возвращает строку вида [object Type]. Позволяет точнее определить тип объектов.
    Object.prototype.toString.call(null)
    "[object Null]"

Оператор typeof используют для быстрой проверки примитивов, а instanceof и Array.isArray() — для более точной проверки объектов.

Аналоги typeof в других языках программирования

Разные языки реализуют проверку типов своими способами:

  • PHP: функция gettype().
    echo gettype(42);
    integer
  • Python: функция type() или isinstance().
    print(type(3.14))
  • MySQL: операторы CAST() или CONVERT() для преобразования, но прямой аналог отсутствует.
  • C: оператор sizeof возвращает размер в байтах, а проверка типов осуществляется на этапе компиляции.

В отличие от JavaScript, во многих строго типизированных языках проверка типа часто происходит во время компиляции.

Типичные ошибки при работе с typeof

Распространенные недочеты разработчиков:

  • Проверка null возвращает "object", что исторически сложилось. Для проверки на null используют строгое равенство.
    let value = null;
    console.log(typeof value === 'object' && value !== null);
    false
  • Проверка необъявленных переменных: typeof возвращает "undefined" без ошибки, что иногда полезно.
    console.log(typeof undeclaredVar);
    "undefined"
  • Ошибка при проверке типа NaN, который имеет тип "number".
    console.log(typeof NaN);
    "number"

Изменения в операторе typeof

Спецификация ECMAScript развивалась:

  • В ES6 добавлена поддержка типа symbol.
  • В ES2020 добавлена поддержка типа bigint.
  • Поведение с null и функциями остается неизменным для сохранения обратной совместимости.

Новых изменений в поведении оператора в последних версиях стандарта не вносилось.

Расширенные примеры использования typeof

Сложные и неочевидные случаи применения:

Пример javascript
// Проверка на число, исключая NaN и Infinity
function isNumber(value) {
    return typeof value === 'number' && isFinite(value);
}
console.log(isNumber(42));
true
Пример javascript
// Отличие функции от объекта
console.log(typeof class C {});
"function"
Пример javascript
// Проверка асинхронных функций и генераторов
console.log(typeof async function() {});
console.log(typeof function*() {});
"function"
"function"
Пример javascript
// Использование в условных выражениях
let config = { debug: true };
if (typeof config.debug === 'boolean') {
    console.log('Режим отладки установлен');
}
Режим отладки установлен
Пример javascript
// Проверка поддержки возможностей браузера
if (typeof Storage !== 'undefined') {
    console.log('LocalStorage доступен');
}
LocalStorage доступен

JS typeof function comments

En
Typeof Returns a string indicating the type of the unevaluated operand.