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

📅 发布时间:2026/7/17 4:01:28 👁️ 浏览次数:
为什么 123.toString() 不会报错?揭秘 JavaScript Number 的隐藏魔法
前几天,我和朋友在咖啡馆聊天。他突然问我一句:“小米,你不是天天写 JavaScript 吗?我一直有个问题。”我喝了口咖啡:“说。”他说:“为什么 123.toString() 可以用?数字不是原始值吗?原始值不是没有方法吗?”我愣了一秒,笑了。这就像你手里拿着一枚普通硬币,结果突然发现它能变成一把瑞士军刀。今天我们就来聊聊JavaScript 的原始值包装类型:Number。这背后的机制,其实非常有意思。原始值:看起来很普通的数字在 JavaScript 里,最常见的数字就是:let num=123;123 是什么?它属于原始值(Primitive Value)。JavaScript 一共有 7 种原始值:NumberStringBooleanNullUndefinedSymbolBigInt这些原始值有一个共同特点:它们不是对象。也就是说理论上:没有属性没有方法只是简单的数据如果按常理来说,这样的代码应该报错:因为num 只是数字,不是对象。但神奇的是它居然能运行。为什么?这就要讲到 JavaScript 的一个“魔法机制”。神奇的包装对象JavaScript 设计者做了一件非常聪明的事情。当你对原始值调用方法时:JavaScript 会临时创建一个对象来包装这个值。流程大概是这样:举个例子: