zoukankan      html  css  js  c++  java
  • 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]

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

    小小笔记,感谢支持。

    看了一部分推荐给大家。挺好的。有分销.

    wx:wch158759898 买了可以在我这把分销拿走 良心推荐。不是为了挣钱、

  • 相关阅读:
    C++——STL内存清除
    c++——智能指针学习(unique_ptr)
    linux下将tomcat加入服务
    linux下oracle远程连接的问题
    oracle计算容量的方式
    oracle删除表的方式
    阻塞与非阻塞的区别
    java中queue的使用
    yum源
    VMware Tools 安装
  • 原文地址:https://www.cnblogs.com/-wch/p/10394695.html
Copyright © 2011-2022 走看看