zoukankan      html  css  js  c++  java
  • Object.prototype.toString.call(obj) 为什么有用以及疑惑点

    能检测的方法很多 基本上的疑惑点是如何检测object null array function,能准确的检测出来这几个的都是好方法

    typeof 0;  //number;
    typeof true;  //boolean;
    typeof undefined;  //undefined;
    typeof "hello world"   //string;
    typeof function(){};   //function;
    
    typeof null; //object
    typeof {};  //object;
    typeof []; //object

    1. typeof 为什么不准

      因为当他在检测null array object的时候  都是object,这是因为这几个都是Object重写的实例  这个也会帮助我们理解标题的疑惑

    2.Object.prototype.toString.call(obj) 为什么有用

      toString方法返回反映这个对象的字符串

      为什么它就能准确判断类型呢,为什么用Object.tostring 方法就不行呢

      还是那一句话 null array object都是Object重写的实例 他们是有自己的tostring的方法 按照原型链的思路,会优先使用重写后的tostring方法,而我们只想用原型链上的tostring的方法

      验证

    var arr=[1,2,3];
    console.log(Array.prototype.hasOwnProperty("toString"));//true
    console.log(arr.toString());//1,2,3
    delete Array.prototype.toString;//delete操作符可以删除实例属性
    console.log(Array.prototype.hasOwnProperty("toString"));//false
    console.log(arr.toString());//"[object Array]"

      当我们删除了array自己的tostring方法后 再次访问会调用原型链后的方法 跟Object.prototype.tostring(obj)一样了

    扩展:其他能检测类型的方法

      1. instanceof 

      可以检测是否是该原型的实例

    // 判断 foo 是否是 Foo 类的实例
    function Foo(){} 
    var foo = new Foo(); 
    console.log(foo instanceof Foo)//true

     缺点:1.因为数组属于object中的一种,所以数组instanceof object,也是true.

    var a={};
    a instanceof Object  //true
    a intanceof Array     //false
    var b=[];
    b instanceof Array  //true
    b instanceof  Object //true

      缺点:2.instanceof不能区分基本类型string和boolean,除非是字符串对象和布尔对象

    var c='abc';
    c instanceof String; //false
    var d=new String();
    d instanceof String  //true

      2.constructor 

      除了undefined和null,其他类型的变量均能使用constructor判断出类型.

      缺点:这个方法容易被改写

      

  • 相关阅读:
    导出excel
    JS一些记录
    Concat
    (二)《SQL进阶教程》学习记录--GROUP BY、PARTITION BY
    PostgreSQL 时间转换
    vlc+flv.js 摄像头 H5 直播
    echarts label formatter params backgroundColor rich 标签设置背景图并传参
    异步、多线程、Await/Async、Task
    “2+3”等于我的自白
    SignalR:React + ASP.NET Core Api
  • 原文地址:https://www.cnblogs.com/web-chuan/p/11578008.html
Copyright © 2011-2022 走看看