3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個贊
幾乎所有內(nèi)容都是JavaScript中的對象。您所稱的原語(字符串,數(shù)字等)都具有方法:
console.log("Message".toUpperCase());
console.log(123.toString());
因此,您可以將toString任何內(nèi)容(即使它看起來并不像對象)應(yīng)用于任何事物的原因是,因?yàn)橐磺袑?shí)際上都是一種對象,這意味著它可以具有方法。以下是toString有關(guān)不同事物的一些示例:
console.log(123..toString());
console.log(["A", "B", "C"].toString());
console.log(typeof true.toString());

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個贊
有多種不同的toString
方法。有Object.prototype.toString
,任何對象都可以繼承。還有Number.prototype.toString
,Boolean.prototype.toString
和String.prototype.toString
。
當(dāng)你做
'foo'.toString()
您實(shí)際上是在調(diào)用String.prototype.toString
-您不是在調(diào)用Object.prototype.toString
。
Object.prototype.toString = () => 'changed'; console.log('foo'.toString());
盡管字符串和其他事物可以解釋為對象,并且已經(jīng)對其進(jìn)行了Object.prototype.toString
調(diào)用,但是通常您只是在調(diào)用原始特定于方法的方法,例如Boolean.prototype.toString
或String.prototype.toString
。(這些原型確實(shí)是繼承自Object.prototype
,但是該Object.prototype.toString
方法被更接近的原型方法所遮蓋,甚至可能根本不考慮)
為什么這些方法存在于這些原語中?可能是為了保持一致性。如果您有不是undefined
或的東西null
,您將知道可以對其進(jìn)行調(diào)用toString
。

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個贊
您應(yīng)該了解“原型繼承”。在我看來,這是javascript語言最重要的概念之一。
上面的答案是正確的,但是直到您花一些時間來學(xué)習(xí)這個主題之前,您都不會理解它們的含義。
希望能給您一些指導(dǎo)!
添加回答
舉報