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


当前回答

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

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

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

其他回答

好的,在回答问题之前,让我们先给你这个概念,在JavaScript中,函数是Object,也可以是null、Object、Array甚至Date,所以正如你所看到的,没有一种简单的方法像typeof obj==“Object”,所以上面提到的一切都会返回true,但是有一些方法可以通过编写函数或使用JavaScript框架来检查它,好的:

现在,假设您有一个真正的对象(不是null、函数或数组):

var obj = {obj1: 'obj1', obj2: 'obj2'};

纯JavaScript:

//that's how it gets checked in angular framework
function isObject(obj) {
  return obj !== null && typeof obj === 'object';
}

or

//make sure the second object is capitalised 
function isObject(obj) {
   return Object.prototype.toString.call(obj) === '[object Object]';
}

or

function isObject(obj) {
    return obj.constructor.toString().indexOf("Object") > -1;
}

or

function isObject(obj) {
    return obj instanceof Object;
}

您可以简单地在代码中使用上述函数之一,方法是调用它们,如果它是一个对象,则返回true:

isObject(obj);

如果您使用的是JavaScript框架,他们通常会为您准备这些类型的函数,其中很少:

jQuery:

 //It returns 'object' if real Object;
 jQuery.type(obj);

角度:

angular.isObject(obj);

Undercore和Lodash:

//(NOTE: in Underscore and Lodash, functions, arrays return true as well but not null)
_.isObject(obj);

试试这个

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

如果您已经在使用AngularJS,那么它有一个内置的方法,可以检查它是否是一个对象(不接受null)。

angular.isObject(...)

哦,我的上帝!我认为这可能比以往任何时候都要短,让我们看看:

短代码和最终代码

函数isObject(obj){返回obj!=null&&obj.constructor.name==“对象”}console.log(isObject({}))//返回trueconsole.log(isObject([]))//返回falseconsole.log(isObject(null))//返回false

解释

退货类型

typeof JavaScript对象(包括null)返回“object”

console.log(类型为null,类型为[],类型为{})

检查其构造函数

检查其构造函数属性会返回带有其名称的函数。

console.log(({}).cconstructor)//返回名为“Object”的函数console.log(([]).cconstructor)//返回名为“Array”的函数console.log((null).cconstructor)//引发错误,因为null实际上没有属性

Function.name简介

Function.name返回函数的只读名称或闭包的“匿名”。

console.log(({}).cconstructor.name)//返回“Object”console.log(([]).cconstructor.name)//返回“Array”console.log((null).cconstructor.name)//引发错误,因为null实际上没有属性

注意:截至2018年,Function.name可能无法在IE中工作https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name#Browser_compatibility

考虑-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));