判断一个变量是不是对象

256 阅读1分钟

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]'