• 【面试题】为什么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

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

  • 相关阅读:
    WebSocket首次使用踩坑记录
    Python中的循环与可迭代对象
    .NETCORE 微软企业登录
    U++ Slate学习笔记 ------ Editor Standalone Window
    技术干货|昇思MindSpore NLP模型迁移之LUKE模型——阅读理解任务
    Elasticsearch 分享
    2023大连海洋大学计算机考研信息汇总
    读Mybatis框架 总结(个人理解)
    stm32cubemx hal学习记录:RNG
    bit、bin 、mcs文件区别
  • 原文地址:https://blog.csdn.net/LS_952754/article/details/126095914