Как проверить тип переменной в JavaScript через typeof?
Пишу функцию, и нужно понять, что мне передали — строку, число или объект. Слышал про typeof, но он на массив отвечает 'object', а на null тоже 'object' — это сбивает. Как проверить тип переменной надёжно?
2 ответа
typeof возвращает строку с типом. Для примитивов он работает отлично:
typeof 42; // 'number'
typeof 'привет'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof function(){}; // 'function'
Но есть две исторические странности, о которых надо знать:
typeof null; // 'object' — это давний баг языка, так и осталось
typeof [1, 2]; // 'object' — массив тоже объект
Поэтому для массива и null нужны отдельные проверки:
Массив — через Array.isArray:
Array.isArray([1, 2]); // true
Array.isArray('abc'); // false
null — строгим сравнением:
const x = null;
if (x === null) {
console.log('это null');
}
Надёжная проверка «это объект, но не null и не массив»:
function isPlainObject(v) {
return typeof v === 'object' && v !== null && !Array.isArray(v);
}
isPlainObject({}); // true
isPlainObject([]); // false
isPlainObject(null); // false
Проверка на NaN — отдельная тема, typeof NaN это 'number'. Используй Number.isNaN(x), а не x === NaN (последнее всегда false).
Шпаргалка-памятка по подводным камням typeof:
typeof null→'object'(не'null'!)typeof []→'object'(бериArray.isArray)typeof NaN→'number'(бериNumber.isNaN)typeof function(){}→'function'(а вот это удобно — функции отличаются)
Для проверки «значение вообще задано» удобно: if (typeof x !== 'undefined') — не упадёт, даже если переменная не объявлена.