JavaScript Object.prototype.toString 解析過程

在 JavaScript 規範(ECMA-262 19.1.3.6)中詳細解釋了 Object.prototype.toString 的解析過程:

  • 01.若是 this 的值爲 undefined,則返回字符串 "[object Undefined]"ui

  • 02.若是 this 的值爲 null,則返回字符串 "[object Null]"this

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

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

  • 05.若是 isArray 不是正常值(好比拋出錯誤),則中斷執行對象

  • 06.若是 isArray === true,則 builtinTag = "Array",以後執行第 16 步ip

  • 07.若是 O 是一個 exotic 字符串對象,則 builtinTag = "String",以後執行第 16 步開發

  • 08.若是 O 擁有內部屬性 [[ParameterMap]],則 builtinTag = "Arguments",跳到第 16 步字符串

  • 09.若是 O 擁有內部方法 [[Call]],則 builtinTag = "Function",跳到第 16 步get

  • 10.若是 O 擁有內部屬性 [[ErrorData]],則 builtinTag = "Error",跳到第 16 步it

  • 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]] 的字符串值,用於檢測內建對象的類型。

值得注意的是,這一方法只對內建對象有效,對宿主對象等其餘類型的對象則不具備可信度。

相關文章
相關標籤/搜索