您的位置:首页 > 移动开发 > Objective-C

JavaScript Object.prototype.toString 解析过程

2016-04-07 09:50 639 查看

在 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]]
的字符串值,用于检测内建对象的类型。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: