/
Вопросы и ответы
/
JavaScript
/

Как проверить является ли переменная объектом js

Как проверить является ли переменная объектом js

5 лет назад

Человек-Молекула

Ответы

4

Еще пара способов:

  • Использование метода Object.prototype.toString():
1
2
3
4
const obj = { a: 1, b: 2 };
if (Object.prototype.toString.call(obj) === '[object Object]') {
  console.log('Это объект');
}
  • Использование оператора instanceof:
1
2
3
4
const obj = { a: 1, b: 2 };
if (obj instanceof Object) {
  console.log('Это объект');
}

4 года назад

Aleksey

3

Самый простой способ проверить, что переменная является объектом, это проверить тип переменной с помощью typeof. Для объектов эта инструкция вернёт строку 'object'.

Например:

1
2
3
4
5
6
// Создаём переменную
const user = { name: 'Ivan' };
// Проверяем является ли переменная объектом
if (typeof user === 'object') {
  console.log('is object');
}

Стоит учитывать, что для null значение будет тоже 'object', так как в системе типов JS null является объектом.

1
console.log(typeof null); // => object

4 года назад

Ivan Gagarinov

1

В javascript оператор typeof возвращает 'object' не только для классических объектов {}, но и для массивов и null:

1
2
[null, [], {}].map(value => typeof value)
[ 'object', 'object', 'object' ]

Поэтому, скажем так, "классический" способ проверки, что перед вами точно объект, а не массив или null такой:

1
typeof x === 'object' && !Array.isArray(x) && x !== null

Во всяком случае, это код набрал наибольшее количество звезд на stackoverflow.

2 года назад

Дмитрий Чувиковский

0

typeof value === 'object' не хватает: он вернёт 'object' и для массива, и для null. Проверка обычного объекта выглядит так:

1
2
3
4
5
6
7
const isObject = (value) =>
  value !== null && typeof value === 'object' && !Array.isArray(value);

console.log(isObject({ a: 1 })); // => true
console.log(isObject([1, 2]));   // => false
console.log(isObject(null));     // => false
console.log(isObject('text'));   // => false

Что возвращает typeof

1
2
3
4
5
console.log(typeof {});         // => object
console.log(typeof []);         // => object
console.log(typeof null);       // => object — историческая ошибка языка
console.log(typeof new Date()); // => object
console.log(typeof (() => {})); // => function

Функции тоже объекты, но typeof для них возвращает 'function'.

Только «простой» объект

Если нужно отличить {} от Date, Map и экземпляров классов, проверьте прототип:

1
2
3
4
5
6
7
const isPlainObject = (value) =>
  Object.prototype.toString.call(value) === '[object Object]' &&
  [Object.prototype, null].includes(Object.getPrototypeOf(value));

console.log(isPlainObject({}));          // => true
console.log(isPlainObject(new Date()));  // => false
console.log(isPlainObject(new Map()));   // => false

Экземпляр конкретного класса

1
2
3
4
class User {}
const user = new User();
console.log(user instanceof User);   // => true
console.log(user instanceof Object); // => true

Проверить, что объект пустой

1
2
3
const isEmpty = (obj) => Object.keys(obj).length === 0;
console.log(isEmpty({}));       // => true
console.log(isEmpty({ a: 1 })); // => false

Библиотеки

В Lodash есть готовые _.isObject() (вернёт true и для массивов и функций) и _.isPlainObject().

Типы данных разбирают в бесплатном курсе «Основы JavaScript».

19 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845