如何检查值是否是JavaScript中的对象?
当前回答
我们可以只用一行来检查,这里obj可以是任何值(包括null)
obj?.__proto__ === Object.prototype
or
obj?.constructor.name === 'Object';
其他回答
这很棘手,因为数组是对象类型,函数是对象类型而实际对象{}也是对象类型
问题
const arr = []
const fun = function(){}
const actualObj = {}
arr instanceof Object // true
fun instanceof Object // true
actualObj instanceof Object // true
因此目标是actualObj必须返回true,其他所有值都必须返回false
actualObj instanceof Object && !(actualObj instanceof Array) && !(typeof actualObj === 'function') // true
简单的工作解决方案:
function isObject(value) {
return !(value instanceof Date) && !Array.isArray(value) && !Object.is(value, null) && !Object.is(value, undefined) && !(value instanceof Function)
}
function isObjectLike(value) {
return value != null && typeof value == 'object' && !Array.isArray(value);
}
基于lodash
当其他一切都失败时,我使用这个:
var isObject = function(item) {
return item.constructor.name === "Object";
};
if(typeof value === 'object' && value.constructor === Object)
{
console.log("This is an object");
}