簡體   English   中英

Javascript toString對我沒有意義

[英]Javascript toString making no sense to me

好吧,我只是做了一下,撓了一下頭。 我在Chrome控制台上嘗試了以下操作:

var a = [];
toString.call(a); //[object Array]
a.toString(); //""
toString(a); //[object Object] I know it's blunder but still!

toString和.toString有什么區別?我絕對知道它們來自不同的作用域(對象),但是應該在什么時候使用哪一個? 為什么這么亂?

首先,我們必須澄清toString是指Object.prototype.toString

> toString === Object.prototype.toString
  true

在規范的15.2.4.2節中說明了Object.prototype.toString工作方式:

  1. 如果thisundefined ,則返回"[object Undefined]"
  2. 如果this值為null ,則返回"[object Null]"
  3. O為調用ToObject並將this值作為參數傳遞的結果。
  4. classO[[Class]]內部屬性的值。
  5. 返回將三個字符串"[object "class"]"串聯在一起的結果的String值。

toString.call(a)Object.prototype.toString.call(a)相同,並且根據上述算法工作: thisObject.prototype.toString.call(a)a (因為您使用了.call ),內部[[Class]]屬性具有值Array ,因此輸出為[object Array]

a.toString() :數組將覆蓋在15.4.4.2節中定義的toString屬性。 簡而言之,所有數組元素都是串聯的,並且由於數組為空,因此您將得到一個空字符串。

toString(a)Object.prototype.toString()相同。 該參數將被忽略。 因此, this是指Object.prototype ,它是一個對象,根據上述算法,輸出為[object Object] 的任何值的輸出都是相同a


什么時候應該使用哪一個?

那要看你想做什么。 就個人而言,除了進行一些快速而骯臟的調試之外,我發現沒有內置的toString函數特別有用。


toString.call(a)應該== a.toString()

好吧, Object.prototype.toStringArray.prototype.toString只是兩個不同的方法,因此您得到的結果是不同的。

您可能會爭辯說Object.prototype.toString如果存在,應該調用覆蓋的toString ,但這不是toString實現的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM