美文网首页
Object.prototype.toString.call()

Object.prototype.toString.call()

作者: 小龙虾Julian | 来源:发表于2020-04-14 10:43 被阅读0次
    1、JS中判断数据类型可以使用typeof,如:
    console.log(typeof(2)) //"number"
    console.log(typeof("abc"))  //"string"
    console.log(typeof(true))  //"boolean"
    console.log(typeof(undefined))  //"undefined"
    console.log(typeof(function fun(){}))  //"function"
    console.log(typeof(null))  //"object"
    console.log(typeof([1,2,3,4,5]))//"object"
    console.log(typeof({}))  //"object"
    

    可以看出:typeof只能区分基本类型,即:number、string、boolean、undefined、function、object,对于null、array、object来说使用typeof会统一返回“object”,要想区分对象、数组、函数是不行的,但是使用Object.prototype.toString.calll(obj)来判断某个对象属于某种内置类型。

    2、使用Object.prototype.toString.calll(obj)来判断某个对象属于某种内置类型,如:
    //判断基本类型
    console.log(Object.prototype.toString.call(null));//[object Null]
    console.log(Object.prototype.toString.call("jerry"));//[object String]
    console.log(Object.prototype.toString.call(true));//[object Boolean]
    console.log(Object.prototype.toString.call(12));//[object Number]
    console.log(Object.prototype.toString.call(undefined));//[object Undefined]
    //判断原生引用类型——数组类型
    console.log(Object.prototype.toString.call([]));//[object Array]
    //判断原生引用类型——函数类型
    console.log(Object.prototype.toString.call(function(){}));//[object Function]
    //判断原生引用类型——日期类型
    console.log(Object.prototype.toString.call(new Date));//[object Date]
    //判断原生引用类型——正则表达式类型
    console.log(Object.prototype.toString.call(/\d/));//[object RegExp]
    //判断原生引用类型——对象类型
    console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object]
    //判断原生引用类型——自定义类型
    function Person(){};
    console.log(Object.prototype.toString.call(new Person));//[object Object]
    

    可以看出:这种方法不能准确判断person是Person类的实例,而只能用instanceof 操作符来进行判断,如:

    console.log(person instanceof Person); // true
    
    3、判断原生JSON对象
    var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);
    console.log(isNativeJSON);  // [object JSON]
    

    结果为 [object JSON] 说明JSON是原生的,否则不是;另外需要注意的是:Object.prototype.toString()本身是允许被修改的,前边的方法都是以toString()方法未被修改作为前提的。

    相关文章

      网友评论

          本文标题:Object.prototype.toString.call()

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