1.typeof
typeof 一个变量为'object'时,这个变量可能是数组 对象 和null
判断变量不是null过滤掉null的情况
obj !== null && typeof obj === 'object'
如果要细分数组和纯对象
Object.prototype.toString.call(obj) === '[object,Object]'
Object.prototype.toString.call(obj) === '[object Array]'
2.instanceof
工作原理> 用于测试构造函数的 prototype 属性是否出现在对象原型链中的任何位置 换句话说,如果A instanceof B,那么 A 必须是一个对象,而 B 必须是一个合法的 JavaScript 函数。在这两个条件都满足的情况下:
判断 B 的 prototype 属性指向的原型对象(B.prototype)是否在对象 A 的原型链上。
如果在,则为 true;如果不在,则为 false。
var a = [1, 2, 3];
console.log(a instanceof Array); // true
console.log(a instanceof Object); // true
//从此我们可以看出a既是数组,也是对象
var userInfo = { userName: "zhangsan" };
console.log(userInfo instanceof Array); // false
console.log(userInfo instanceof Object); // true
//userInfo只是对象,而不是数组
3.利用构造函数判断
var a = [1, 2, 3];
console.log(a.__proto__.constructor === Array); //true
console.log(a.__proto__.constructor === Object); // false
4.toString( )函数
Object.prototype.toString.call(obj) === '[object,Object]'
Object.prototype.toString.call(obj) === '[object Array]'