如何检查值是否是JavaScript中的对象?


当前回答

考虑-typeof bar==“object”以确定bar是否为对象

虽然typeof bar==“object”是检查bar是否为对象的可靠方法,但JavaScript中令人惊讶的是,null也被视为对象!

因此,令大多数开发人员惊讶的是,以下代码将在控制台中记录true(而不是false):

var bar=空;console.log(类型栏==“对象”);//日志为真!只要意识到这一点,也可以通过检查bar是否为空来轻松避免该问题:

console.log((bar!==null)&&(typeof bar==“object”));//日志错误为了彻底回答,还有两件事值得注意:

首先,如果bar是一个函数,上述解决方案将返回false。在大多数情况下,这是所需的行为,但在希望函数也返回true的情况下,可以将上述解决方案修改为:

console.log((bar!==null)&&((bar类型==“对象”)||(bar类型===“函数”));其次,如果bar是一个数组(例如,如果varbar=[];),上述解决方案将返回true。在大多数情况下,这是所需的行为,因为数组确实是对象,但在您希望数组也为false的情况下,可以将上述解决方案修改为:

console.log((bar!==null)&&(typeof bar==“object”)&&“[对象数组]”);然而,还有另一种方法可以为null、数组和函数返回false,但为对象返回true:

console.log((bar!==null)&&(bar.constructor==Object));或者,如果您正在使用jQuery:

console.log((bar!==null)&&(typeof bar==“object”)&&;

ES5使数组情况非常简单,包括它自己的空检查:

console.log(Array.isArray(bar));

其他回答

试试这个

if (objectName instanceof Object) {
  alert('Not an object');
}
else {
  alert('An object');
}

如果您想检查对象的原型是否仅来自object。过滤掉字符串、数字、数组、参数等。

function isObject (n) {
  return Object.prototype.toString.call(n) === '[object Object]';
}

或作为单个表达式箭头函数(ES6+)

const isObject = n => Object.prototype.toString.call(n) === '[object 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

如果typeof yourVariable==“object”,则它是一个对象或null。

如果要排除null、数组或函数,只需执行以下操作:

if (
    typeof yourVariable === 'object' &&
    !Array.isArray(yourVariable) &&
    yourVariable !== null
) {
    executeSomeCode();
}

您可以使用JSON.stringify来测试Object,如下所示:

var测试={}if(JSON.stringify(测试)[0]==“{”){console.log('这是一个对象')}