js 判断对象类型的最优解决方案

项目中有可能会遇到判断对象类型。这时候问题就来了~!

大家可能会采用typeof来判断。毕竟是判断类型的老牌方法。

  var fn = function(obj){
    console.log(obj);
  }
  var str = 'string';
  var arr = [1,2,3];
  var obj = {
    a:123,
    b:456
  };
  var num = 1;
  var t = true;
  var n = null;
  var u = undefined;
  //方法一使用typeof方法。
  console.log(typeof fn);//function
  console.log(typeof str);//string
  console.log(typeof arr);//object
  console.log(typeof obj);//object
  console.log(typeof num);//number
  console.log(typeof t);//boolean
  console.log(typeof n);//null是一个空的对象同样是object
  console.log(typeof u);//undefined
  

这里可以看出来typeof没办法检测Array跟null都是object,所以用typeof并不完美、
这时候大家可能会想不是还有instanceof吗?
下面我们再来看一个简单的小栗子:

var  str = '我是String';
str instanceof String //输出--->??

这里的答案是flase,为什么会这样?
instanceof左操作数是一个类,右操作数是标识对象的类。如果左侧的对象是右侧类的实例,则返回true.而js中对象的类是通过初始化它们的构造函数来定义的。即instanceof的右操作数应当是一个函数。所有的对象都是object的实例。如果左操作数不是对象,则返回false,如果右操作数不是函数,则抛出typeError。
怎么才能是true呢?看下面的列子~

var  str = new String('我是String');
str instanceof String //输出--->true

下面就是最优得解决方案。利用tostring()来判断。

var obj = {
  'name': 'ka~'
};
var arr = ['1', '2', 'q'];
function fun(name, age) {
  this.name = name;
  this.age = age;
}
var o = new fun('ka~', '24');
console.log(Object.prototype.toString.call(obj)); //[Object Object]
console.log(Object.prototype.toString.call(arr)); //[object Array]
console.log(Object.prototype.toString.call(o)); //[Object Object]
console.log(Object.prototype.toString.call(null)); //[object Null]

这样就可以完美的判断一个对象的数据类型。

小小笔记,感谢支持。

猜你喜欢

转载自www.cnblogs.com/-wch/p/10394695.html
今日推荐