Лучший способ понять, что объект - не массив и не скаляр

Есть ли на данный момент более оптимальный способ понять, что объект - не массив и не скаляр? В настоящий момент использую такую конструкцию:

const check = (item) => !Array.isArray(item) && item instanceof Object;

console.log(check({a: {b: "c"}}));      // object   - true
console.log(check(["a", "b", "c"]));    // array    - false
console.log(check("строка"));           // string   - false
console.log(check(100500));             // number   - false
console.log(check(true));               // boolean  - false
console.log(check(null));               // null     - false
console.log(check(function() {}));      // function - true 

UPD: Добавил больше типов. Выяснилось, что function эта конструкция проверяет некорректно.


Ответы (2 шт):

Автор решения: Вадим Александру
Array.prototype.isObject = () => false
Object.prototype.isObject = () => true

[1,2,3].isObject() // false
→ Ссылка
Автор решения: vp_arth

Всё у вас ок. Вам же нужно убедиться, что объект не скаляр и не массив.
Ровно это Вы и проверяете.

Если скаляров не будет, проверку на объект можно опустить.

const check = a => 
  (typeof a === 'object' && a !== null) 
    && !Array.isArray(a)

console.log(check({a: {b: "c"}}));      // object   - true
console.log(check(["a", "b", "c"]));    // array    - false
console.log(check("строка"));           // string   - false
console.log(check(100500));             // number   - false
console.log(check(true));               // boolean  - false
console.log(check(null));               // null     - false
console.log(check(function() {}));      // function - false 

→ Ссылка