美文网首页
javascript数据类型判断

javascript数据类型判断

作者: 小杰66 | 来源:发表于2021-04-05 07:40 被阅读0次

    数据类型

    • null
    • undefined
    • boolean
    • number
    • string
    • object
    • symbol
    • Bigint

    typeof

    typeof null; //object
    typeof undefined; //undefined
    typeof false; //boolean
    typeof 1; //number
    typeof "1"; //string
    typeof {}; //object
    typeof Symbol(); //string
    typeof 123n; // bigint
    typeof function () {}; //function
    

    问题1
    function实际上也是对象但它属于object的子类型,是可调用对象,虽然它不是内置类型但typeof可以区分函数和其它对象
    问题2
    typeof null得到object,原因是对象在底层都表示为二进制,在Javascript中二进制低三位都为0的话会被判断为object,null的二进制全为0,所以执行typeof时会返回"object"

    Object.prototype.toString

    var toString = function (v) {
      console.log(Object.prototype.toString.call(v).slice(8, -1));
    };
    
    toString(null); //Null
    toString(undefined); //Undefined
    toString(false); //Boolean
    toString(1); //Number
    toString("1"); //String
    toString({}); //Object
    toString(Symbol()); //Symbol
    toString(123n); //BigInt
    toString(function () {}); //Function
    toString(new Date()); //Date
    toString([]); //Array
    toString(/reg/gi); //RegExp
    

    上面的typeof无法判断null也无法判断array/date/reg等,这时候可以用Object.prototype.toString,这也是类型判断的终极手段。不过Object.prototype.toString得到的值也是可以通过Symbol.toStringTag 来修改的

    var arr = [];
    arr[Symbol.toStringTag] = "Hello";
    Object.prototype.toString.call(arr); //[object Hello]
    

    instanceof

    instanceof是用来比较一个对象是否为某一个构造函数的实例,实际上它执行的操作就是不断寻找对象的原型链对象比较是否等于构造函数的原型,实现如下。

    function myInstanceof(obj, Con) {
      let pro = Con.prototype;
      while (obj.__proto__) {
        if (obj.__proto__ === pro) return true;
        obj = obj.__proto__;
      }
      return false;
    }
    
    //这里可以看出是通过和构造函数的原型比较得出的结果
    function A() {}
    function B() {}
    var a = new A();
    a.__proto__ = B.prototype;
    a instanceof A; //false
    a instanceof B; //true
    

    另外instanceof可以通过对象方法的形式调用

    a instance A
    //等价于
    A[Symbol.hasInstance](a)
    

    相关文章

      网友评论

          本文标题:javascript数据类型判断

          本文链接:https://www.haomeiwen.com/subject/nbwxkltx.html