2014-01-17 52 views
4
var a = "asd"; 
toString.call(a); //prints [object String] 

爲什麼這與a.toString();不一樣? toString函數中的this的值在兩種情況下都是正確的?我預計它會輸出「asd」(與a.toString()相同)。javascript中的通話功能輸出

回答

2

你用什麼window.toString,但它應該是:

String.prototype.toString.call(a) // then it should be same 
+2

window.toString()與String.prototype.toString()有什麼不同?有沒有解釋window.toString()的行爲的文檔? – everconfusedGuy

+0

它們只是不同的實現。 – xdazz

+0

@xdazz - 我相信'window'中的'toString'與'''中的'forEach'具有不同的本地代碼,而不是'toString',就像'Array'和'Node List'中的'forEach'一樣。 –

0

他們是不同的方法(雖然它們具有相同的名稱)。除了@xdazz's answer,證明toString在其他類型的行爲有所不同:

[].toString.call("abc"); //Array 

這也不會返回​​。


document.querySelectorAll("*").toString.call("abc") //Node List 

不​​。


(2).prototype.toString.call("abc") //Number 

錯誤,也toString在數量上也可以有一個基數的說法。


結論:它們都是不同的。由於window是一種奇怪的Object,它不共享與String相同的toString