Как определить, является ли значение объектом в JavaScript

Проверка на объект в JavaScript

Здравствуйте! У меня возникла задача, которая требует создания функции для проверки, является ли переданное значение объектом. Необходимо учитывать, что в JavaScript есть различные типы данных, и нужно правильно различать их.

function isObject(value) {
    // здесь должна быть логика проверки
    return isObj;
}

let sampleObject = { name: 'Алексей', age: 30 };
let sampleNumber = 25;
let sampleString = 'привет';

console.log(isObject(sampleObject)); // ожидаем true
console.log(isObject(sampleNumber)); // ожидаем false

Сложность в том, что массивы также считаются объектами. Как лучше всего организовать такую проверку? Буду признателен за советы!

Кстати, не забудь про null! Он тоже возвращает ‘object’ с помощью typeof. Можно сделать так: typeof value === 'object' && value !== null && !Array.isArray(value). Но как быть с Date и RegExp? Нужно ли их исключать или только массивы?

Я использую value instanceof Object && !Array.isArray(value). Правда Date и регулярки тоже проходят, но null и примитивы точно отсеет. Зависит от задачи — если нужны только plain objects, лучше через constructor. Если все объекты кроме массивов — мой вариант подойдет.

Я использую value && typeof value === 'object' && value.constructor === Object. Отсеивает null, массивы, Date и прочие встроенные объекты — остаются только “чистые” объекты. Не работает с Object.create(null), но в 99% случаев хватает.