为什么toString()是不需要对象的方法?

时间:2019-05-10 23:23:28

标签: javascript string object

我对编程的了解越深,我以为我所知道的旧概念就会使我困惑。例如,toString()方法。我怎么能将此方法应用于不是对象的变量?是因为toString()是可应用于所有数据类型的内置javascript方法吗?

3 个答案:

答案 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.toStringBoolean.prototype.toStringString.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.toStringString.prototype.toString。 (这些原型 do 恰好继承自Object.prototype,但是Object.prototype.toString方法被更接近的原型方法所遮盖,甚至可能根本不考虑)

为什么这些方法对于那些原语存在?可能是为了保持一致性。如果您的东西不是undefinednull,那么您将可以在其上呼叫toString

答案 2 :(得分:0)

您应该了解“原型继承”。我认为这是javascript语言最重要的概念之一。

以上答案是正确的,但是直到您花一些时间来研究该主题之前,您都不会理解它们的含义。

希望能为您提供一些指导!

相关问题