Лучший способ понять, что объект - не массив и не скаляр
Есть ли на данный момент более оптимальный способ понять, что объект - не массив и не скаляр? В настоящий момент использую такую конструкцию:
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