• Object.prototype.toString()


    1.Object.prototype.toString()判断原理

    那么当我们调用这个方法时,具体会做那些操作呢?
    1.如果this value是undefined,返回 "[object Undefined]"
    2.如果this value是null,返回"[object Null]"
    3.让O作为ToOject(this value)方法的返回值
    4.让isArray作为IsArray(O)方法的返回值
    5.如果isArray为true,使builtinTag为"Array"
    6.else 如果O包含[[ParameterMap]]internal slot,使builtinTag为"Arguments"
    7.else 如果O包含[[Call]]internal method,使builtinTag为"Function"
    8.else 如果O包含[[ErrorData]]internal slot,使builtinTag为"Error"
    9.else 如果O包含[[BooleanData]]internal slot,使builtinTag为"Boolean"
    10.else 如果O包含[[NumberData]]internal slot,使builtinTag为"Number"
    11.else 如果O包含[[StringData]]internal slot,使builtinTag为"String"
    12.else 如果O包含[[DateValue]]internal slot,使builtinTag为"Date"
    13.else 如果O包含[[RegExpMatcher]]internal slot,使builtinTag为"RegExp"
    14.else 使builtinTag为"Object"
    15.让tag作为Get(O,@@toStringTag)的返回值
    16.如果Type(tag)不是String,使tag为builtinTag的值
    17.返回由"[object ",tag,"]"这三个字符串拼接的字符串
    具体的解释可见[ECMAScript官方文档][1]
    

    2.Object.prototype.toString()与Object.toString()的区别

    • Object.toString()是Object构造函数上的方法,返回的是对应的函数
    • Object.prototype.toString()是Object原型对象上的方法,返回的是代表该对象的字符串

      var obj = {};
      Object.toString(obj);//"function Object() { [native code] }"
      Object.prototype.toString.call(obj);//"[object Object]"

    3.为什么Array、String、Number、Boolean等不能直接调用toString()?

    因为Array、String、Number、Boolean、RegExp、Date等类型都重写了toString(),如果直接调用则因为自身的原型对象上已有toString()方法,就不会调用到Object原型对象上的toString()方法了。
    
    1. Array类型

      //toString()返回数组中的 数值的字符串表达
      var arr = ["cherry","rose"];
      arr.toString();//"cherry,rose"
    2. String类型

      //toString()返回字符串的字面量表示
      var str = "my name is cherry"
      str.toString();//"my name is cherry"
    3. Number类型

      //toString()返回 对应数值的字符串表达
      var num = 18;
      num.toString();//"18"
    4. Boolean类型

      //toString()返回布尔值的字符串表达
      var bool = true;
      bool.toString();//"true";
    5. RegExp类型

      var patten = new RegExp("\abc\d",'gi');
      patten.toString();//"/abc/d/gi"
    6. Date类型

      //toString() 返回当前时间的标准时间字符串表达
      var date = new Date(2019/07/07);
      date.toString();//"Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)

    结语

    1. 首先需要了解Object.prototype.toString()的原理和各值返回的字符串。
    2. Object.prototype.toString()与Object.toString()是两个不同的方法,他们返回的值是不一样的。前者返回的是该对象类型的字符串,后者返回的是一个函数代码
    3.为什么数组、布尔等不直接调用toString(),因为它们自己的原型对象上重写了toString()代表各自不同的逻辑。需要调用Ojbect原型对象上的toString()去判断类型
    
    穷则独善其身,达则兼济天下……
  • 相关阅读:
    万网域名API查询
    华为鲲鹏麒麟安装docker
    华为鲲鹏麒麟安装K8S
    tkinter如何实现最大化
    if条件判断失败,执行else之后,直接退出整个程序
    python中函数和方法的区别
    在python的函数中使用批量注释,注意缩进
    golang 运行 sqlite 包时报 gcc 命令不存在
    我的10个开发原则
    shell 下载文件
  • 原文地址:https://www.cnblogs.com/hmy-666/p/14439886.html
Copyright © 2020-2023  润新知