Javascript: как проверить, что переменная это объект
Казалось бы, нет ничего проще чем проверить что переменная в js это объект. Но не все так просто, как кажется.
К примеру мы можем проверить через typeof, но проблема в том, что массив тоже будет объектом. Давайте рассмотрим пример ниже:
Неправильная проверка объекта
let a = {};
typeof a;
// 'object'
let b = [];
typeof b;
// 'object'
Как мы видим выше, переменная a и b вернули название своего типа как object.
Правильная проверка через class
Воспользуемся маленькой хитростью обратившись к свойству [[Class]], которое содержится в строенных объектах.
Напрямую мы сделать этого не можем, но мы можем прочитать его через метод toString. После чего получим строку такого типа: [object значение]
{}.toString({});
// [object Object]
{}.toString([]);
// [object Array]
Обратите внимание, что в консоле напрямую таким образом проверить не получиться. Потому что фигурные скобки будут считаться как блок.
Поэтому надо обернуть вызов например так:
console.log({}.toString({}));
Функция для проверки типа переменной JS
Теперь давайте напишем функцию и завернем всю логику, где на выходе обрежем не нужную информацию и получим только лишь тип переменной.
const getTypeOf = (obj) => {
return {}.toString.call(obj).slice(8, -1);
}
let a = {};
getTypeOf(a); // Object
На выходе получаем строку с названием типа.