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]]的字符串值,用于检测内建对象的类型。
值得注意的是,这一方法只对内建对象有效,对宿主对象等其他类型的对象则不具有可信度。
相关文章推荐
- Objective-C的hook方案(一): Method Swizzling
- Objective-C 语言特性
- Objective-C中编程中一些推荐的书写规范小结
- QObject::connect: Cannot queue arguments of type 'XXX'
- iOS JSON与Object之间的映射 ObjectMapper For Swift
- 【转】关于几种访问GameObject方式的效率对比
- [IOS]NSObject--用于传值
- JS引用类型Object
- 后台传过来的JSON数据里的date传到前台的时候显示的是【Object object】 处理方法
- Objective-C 打印九九乘法表
- 终于懂了:Delphi消息的Result域出现的原因——要代替回调函数的返回值!(MakeObjectInstance不会帮助处理(接收)消息回调函数的返回值)
- iOS js与objective-c的交互(转)(文中所说的只适用于macOsx)
- 1 | Objective-C入门
- Object-c 归档--源自技术
- 用objective-c 实现常用算法(冒泡、选择、快速、插入)
- 序列化TList of objects(摘自danieleteti的网站)
- 【hibernate】org.hibernate.ObjectNotFoundException: No row with the given identifier exists:
- $.isEmptyObject():检查对象是否为空(不包含任何属性)。
- OSError: libiomp5.so: cannot open shared object file: No such file or directory
- objective-c 中 category 和 extension 的区别