• 【面试题】为什么Object.prototype.toString.call() 可以准确判断对象类型?


    为什么Object.prototype.toString.call() 可以准确判断对象类型?

    点击打开视频讲解

    typeof 与 Object.prototype.toString.call()的对比

    typeof {}
    'object'
    typeof []
    'object'
    Object.prototype.toString.call({})
    '[object Object]'
    Object.prototype.toString.call([])
    '[object Array]'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    .toString()方法

    返回这个对象的字符串表现
    
    • 1
    console.log("末晨曦吖".toString());//末晨曦吖  返回的是字符串对象的字符串表现
    console.log((1).toString());//1
    console.log([1,2].toString());//1,2  返回的是数组对象的字符串表现
    console.log(new Date().toString());//Wed Dec 15 2021 17:08:24 GMT+0800 (中国标准时间)
    console.log(function(){}.toString());//function (){}
    console.log(null.toString());//error
    console.log(undefined.toString());//error
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    总结:

    .toString()返回这个对象的字符串表现
    比如:[1,2].toString()  =》 返回的是数组对象的字符串表现
    Array、function等类型作为Object的实例,都各自重写了自己的toString方法;
    原型     	    obj
    实例       Array     fn   都各自重写了自己的toString方法;
    我们要得到对象的具体类型,需要调用Object的原型的未被重写的toString()方法;
    delete属性用与删除对象的某个属性
    hasOwnProperty()方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    为什么要加 .call()

    Object.prototype.toString([])	//'[object Object]'
    
    • 1

    总结:

    Object.prototype返回的是原型的字符串的表现
    原型       Obj
    实例  Object.prototype
    如果不加call()的话返回的就是原型obj的字符串的表现,
    加call()其实就是把call中的参数传入原型obj中,指向被call的对象;
    所以我们在使用时要加call()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    <template>
      <div id="app">
        <button @click="getToString">toString()button>
        <button @click="deleteToString">deletebutton>
      div>
    template>
    
    <script>
    export default {
      name: 'App',
      data(){
        return {
          
        }
      },
      methods:{
        getToString(){
          console.log("末晨曦吖".toString());   //末晨曦吖
          console.log((1).toString());    //1
          console.log([1,2].toString());    //1,2
          console.log(new Date().toString());   //Wed Dec 15 2021 17:08:24 GMT+0800 (中国标准时间)
          console.log(function(){}.toString());   //function (){}
          console.log(null.toString());   //error
          console.log(undefined.toString());    //error
        },
        deleteToString(){
          // 例
          delete Array.prototype.toString
          console.log([1,2].toString())     //[object Array]
          console.log(Array.prototype.hasOwnProperty('toString'))   //false
        }
      }
    }
    script>
    
    <style scoped>
     
    style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    点击打开视频讲解原型与原型链

  • 相关阅读:
    Kotlin 操作集合的高阶函数
    实时数据仓库==(总结)
    为什么远程访问软件是建筑师的必备品
    第一章 SQL Server 数据库部署
    【Leetcode】剑指Offer 04:二维数组中的查找
    JAVA毕业设计服装连锁店后台管理系统计算机源码+lw文档+系统+调试部署+数据库
    小程序商城开发注意事项与作用意义_OctShop
    测试 C、Python、Java 等 16 种编程语言的 Hello World:7 种存在 Bug?
    python 脏话处理、特殊词汇过滤!
    戴尔外星人原厂系统美版改国行正确识别本机SN,支持F12 Support Assist OS Recevory恢复重置识别SN服务编码
  • 原文地址:https://blog.csdn.net/LS_952754/article/details/126095914