zoukankan      html  css  js  c++  java
  • JavaScript Object.prototype.toString 解析过程

    在 JavaScript 规范(ECMA-262 19.1.3.6)中详细解释了 Object.prototype.toString 的解析过程:

    • 01.如果 this 的值为 undefined,则返回字符串 "[object Undefined]"

    • 02.如果 this 的值为 null,则返回字符串 "[object Null]"

    • 03.使用 O 表示 ToObject(this) 的值

    • 04.使用 isArray 表示 IsArray(O) 的值

    • 05.如果 isArray 不是正常值(比如抛出错误),则中断执行

    • 06.如果 isArray === true,则 builtinTag = "Array",之后执行第 16 步

    • 07.如果 O 是一个 exotic 字符串对象,则 builtinTag = "String",之后执行第 16 步

    • 08.如果 O 拥有内部属性 [[ParameterMap]],则 builtinTag = "Arguments",跳到第 16 步

    • 09.如果 O 拥有内部方法 [[Call]],则 builtinTag = "Function",跳到第 16 步

    • 10.如果 O 拥有内部属性 [[ErrorData]],则 builtinTag = "Error",跳到第 16 步

    • 11.如果 O 拥有内部属性 [[BooleanData]],则 builtinTag = "Boolean",跳到第 16 步

    • 12.如果 O 拥有内部属性 [[NumberData]],则 builtinTag = "Number",跳到第 16 步

    • 13.如果 O 拥有内部属性 [[DateValue]],则 builtinTag = "Date",跳到第 16 步

    • 14.如果 O 拥有内部属性 [[RegExpMather]],则 builtinTag = "RegExp",跳到第 16 步

    • 15.如果第 6 ~ 14 步都不符合,则 builtinTag = "Object",跳到第 16 步

    • 16.使用 tag 表示 Get (O, @@toStringTag) 的值

    • 17.如果 tag 不是正常值,则中断执行

    • 18.如果 Type(tag) 不是一个字符串,则 tag = builtinTag

    • 19.返回一个 "[object" + tag + "]" 形式的字符串

    开发者喜欢使用该方法获取内部属性 [[Class]] 的字符串值,用于检测内建对象的类型。

    值得注意的是,这一方法只对内建对象有效,对宿主对象等其他类型的对象则不具有可信度。

  • 相关阅读:
    python 企业微信告警
    容器启动报错listen unix /containerd-shim/moby/9a3b9086ece8fcd8746695836e3f057cc0313b3cdb722d76a5f571dfa428759e/shim.sock: bind: address already in use: unknown
    etcd查询k8s相关数据
    hadoop三大核心组件概念及原理
    使用nginx反代实现k8s apiserver高可用
    k8s useraccout账号创建及RDBA授权
    k8s之二进制部署
    git代码提交后jenkins的构建与持续部署
    dockerfile动态修改服务配置文件
    数据库操作语句DDL,DML,DCL
  • 原文地址:https://www.cnblogs.com/hgonlywj/p/5362268.html
Copyright © 2011-2022 走看看