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]]的字符串值,用于检测内建对象的类型。值得注意的是,这一方法只对内建对象有效,对宿主对象等其他类型的对象则不具有可信度。
浙公网安备 33010602011771号