2017-08-15 89 views
3

好:在JavaScript中,哪些類型支持toString()?

'hello'.toString() // "hello" 
let obj = {} 
obj.toString()  // "[object Object]" 

壞:

undefined.toString() // throws TypeError 
null.toString()  // throws TypeError 

是否還有其他類型,將扔在.toString()方法?

+4

'toString'是在'Object'定義,所以比undefined和null,這當然不支持任何方法在所有其它任何類型。 – 2017-08-15 05:13:53

+1

值得注意的是,這也適用於數字文字,但由於時間段作爲小數分隔符和成員訪問運算符服務雙重任務,因此您必須注意語法。 '1.toString()'產生一個語法錯誤,但'1..toString()'產生'「1」'。 –

+0

[並非所有人都這樣做](https://stackoverflow.com/q/18640776/1048572)。 – Bergi

回答

2

每個從Object繼承的obj都必須使用string方法。

從javascript開始 從JavaScript 1.8.5開始toString()調用null返回[object Null],undefined返回[objectUndefined]。

您可以通過以下鏈接閱讀更多關於它: You can read more about it at this link

1

在原型鏈中沒有此方法的對象上調用toString()將導致錯誤。例如:

let a = Object.create(null); 
a.toString() //TypeError 
+0

由於a不是Object的實例而引發錯誤。 –

+0

'let a = Object.create(null); a.toString = function(){return'test'}; a.toString()//測試' –

4

toString()

docs每個對象具有被自動調用當對象被表示爲文本值或當對象被稱爲一個toString()方法以期望字符串的方式。默認情況下,toString()方法由繼承,每個對象來自Object

如果變量類型不是對象,它將拋出。

所以你最好的選擇是你打電話之前可以檢查test instanceof Object

而且值得一提的是,你的代碼與1.8.5版本

var toString = Object.prototype.toString; 
toString.call(undefined) // gives [object Undefined] 
toString.call(null)  // gives [object Null] 

注:在JavaScript啓動1.8.5的toString()呼籲空返回[對象空],和不確定的回報[對象未定義],如ECMAScript第5版中定義的和隨後的勘誤表。請參閱使用_toString()_ to_detect_object_class。

+0

不僅Object的後代對象有'toString'方法。您可以手動將此方法添加到任何對象 –

+0

它關於從Object派生的toString(),並且您可以在任何對象上創建自己的方法。 –

+1

像'undefined'和'null'這樣的調用方法只會拋出異常,而不會產生字符串。不,JS1.8.5沒有改變。 – Bergi

1

toString在Object上定義,因此除undefined和null以外的任何其他類型都將繼承toString