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