ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

为什么 123.toString() 不会报错?揭秘 JavaScript Number 的隐藏魔法

2026/8/15 18:36:57 拓冰建站 浏览量
为什么 123.toString() 不会报错?揭秘 JavaScript Number 的隐藏魔法

前几天,我和朋友在咖啡馆聊天。他突然问我一句:“小米,你不是天天写 JavaScript 吗?我一直有个问题。”

我喝了口咖啡:“说。”

他说:“为什么 123.toString() 可以用?数字不是原始值吗?原始值不是没有方法吗?”

我愣了一秒,笑了。这就像你手里拿着一枚普通硬币,结果突然发现它能变成一把瑞士军刀。

今天我们就来聊聊JavaScript 的原始值包装类型:Number。这背后的机制,其实非常有意思。

原始值:看起来很普通的数字

在 JavaScript 里,最常见的数字就是:let num=123;

123 是什么?它属于原始值(Primitive Value)

JavaScript 一共有 7 种原始值:

  • Number
  • String
  • Boolean
  • Null
  • Undefined
  • Symbol
  • BigInt

这些原始值有一个共同特点:它们不是对象。也就是说理论上:

  • 没有属性
  • 没有方法
  • 只是简单的数据

如果按常理来说,这样的代码应该报错:

因为num 只是数字,不是对象。但神奇的是它居然能运行。为什么?

这就要讲到 JavaScript 的一个“魔法机制”。

神奇的包装对象

JavaScript 设计者做了一件非常聪明的事情。当你对原始值调用方法时:JavaScript 会临时创建一个对象来包装这个值

流程大概是这样:

举个例子: