← Все вопросы

Как проверить тип переменной в JavaScript через typeof?

Задан 17 месяцев назад982 просмотров2 ответа
8

Пишу функцию, и нужно понять, что мне передали — строку, число или объект. Слышал про typeof, но он на массив отвечает 'object', а на null тоже 'object' — это сбивает. Как проверить тип переменной надёжно?

2 ответа

13
✓ Принятый ответ — помог автору

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).

4

Шпаргалка-памятка по подводным камням typeof:

  • typeof null → 'object' (не 'null'!)
  • typeof [] → 'object' (бери Array.isArray)
  • typeof NaN → 'number' (бери Number.isNaN)
  • typeof function(){} → 'function' (а вот это удобно — функции отличаются)

Для проверки «значение вообще задано» удобно: if (typeof x !== 'undefined') — не упадёт, даже если переменная не объявлена.

Ваш ответ

, чтобы ответить на вопрос.