我对编程的了解越深,我以为我所知道的旧概念就会使我困惑。例如,toString()方法。我怎么能将此方法应用于不是对象的变量?是因为toString()是可应用于所有数据类型的内置javascript方法吗?
答案 0 :(得分:3)
几乎所有内容都是JavaScript中的对象。您所谓的基元(字符串,数字等)都有方法:
console.log("Message".toUpperCase());
console.log(123.toString());
所以您可以将toString
应用于任何对象(即使它看起来不像是对象)的原因是因为所有内容实际上都是一种对象,这意味着它可以具有方法。这是toString
在不同事物上的一些示例:
console.log(123..toString());
console.log(["A", "B", "C"].toString());
console.log(typeof true.toString());
答案 1 :(得分:2)
toString
方法有多种。有Object.prototype.toString
,任何对象都将继承。还有Number.prototype.toString
,Boolean.prototype.toString
和String.prototype.toString
。
这样做的时候
'foo'.toString()
您实际上是在调用String.prototype.toString
-您不是在调用Object.prototype.toString
。
Object.prototype.toString = () => 'changed';
console.log('foo'.toString());
虽然字符串和其他内容 可以解释为对象,并且调用了Object.prototype.toString
,但通常您只是调用 primitive-specific 方法,例如Boolean.prototype.toString
或String.prototype.toString
。 (这些原型 do 恰好继承自Object.prototype
,但是Object.prototype.toString
方法被更接近的原型方法所遮盖,甚至可能根本不考虑)
为什么这些方法对于那些原语存在?可能是为了保持一致性。如果您的东西不是undefined
或null
,那么您将可以在其上呼叫toString
。
答案 2 :(得分:0)
您应该了解“原型继承”。我认为这是javascript语言最重要的概念之一。
以上答案是正确的,但是直到您花一些时间来研究该主题之前,您都不会理解它们的含义。
希望能为您提供一些指导!