【问题标题】:How come toString() is a method that doesn't need an object?为什么 toString() 是一个不需要对象的方法?
【发布时间】:2019-05-10 23:23:28
【问题描述】:

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

【问题讨论】:

  • 哪个toString 方法?你的意思是Object.prototype.toString
  • 类似下面的例子: var message = "Hello world!"; var x = message.toUpperCase(); @CertainPerformance
  • 所以你真的在问String.prototype.toString
  • @CertainPerformance 我猜是的,是的

标签: javascript string object


【解决方案1】:

在 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());

【讨论】:

  • 当您在原语上调用toString 时,通常您只是在调用特定于原语的toString 方法。如果你真的调用了Object.prototype.toString,你会看到[object String]
【解决方案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,但通常你只是调用原始特定方法,比如Boolean.prototype.toStringString.prototype.toString。 (这些原型确实恰好继承自 Object.prototype,但 Object.prototype.toString 方法被更接近的原型方法所掩盖,甚至可能不被考虑)

为什么这些原语存在这些方法?可能是为了一致性。如果你有不是undefinednull 的东西,你就会知道你可以打电话给toString

【讨论】:

    【解决方案3】:

    您应该了解“原型继承”。在我看来,这是 javascript 语言最关键的概念之一。

    上述答案是正确的,但在您花一些时间研究这个主题之前,您不会理解它们的含义。

    希望能给你一些指导!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 2014-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多