You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Object.getPrototypeOf(5)与5.__proto__结果不同?

问题解答

核心原因:原始值的自动装箱与语法解析规则

  • 先纠正一个表述偏差:Object.getPrototypeOf(5)返回的不是Number构造函数,而是Number.prototype——这是所有Number包装对象的原型。
  • 数字5属于JS的原始值(primitive value),本身并非对象,天然没有__proto__属性。

1. Object.getPrototypeOf(5)的执行逻辑

当给Object.getPrototypeOf传入原始值时,JS引擎会自动触发自动装箱(autoboxing):把原始值5转换为对应的包装对象new Number(5),再获取该包装对象的原型,最终得到Number.prototype。

2. 5.__proto__报错的原因

JS语法解析器会把紧跟在数字后的.识别为小数点,而非对象属性访问符。因此5.__proto__会被解析成「数字5.加上__proto__」,不符合数字的语法规范,直接抛出语法错误。

3. 正确获取原始值对应原型的方式

若要通过__proto__获取,需用语法明确告知解析器这是属性访问操作:

  • 给原始值加括号:(5).__proto__
  • 使用两个小数点:5..__proto__(第一个是小数点,第二个是属性访问符)
    这两种写法都会触发自动装箱,最终得到的结果和Object.getPrototypeOf(5)完全一致,都是Number.prototype。

4. 普通对象的差异

普通对象本身就是引用类型,不存在装箱操作,Object.getPrototypeOf(obj)和obj.__proto__直接指向同一个原型对象,因此二者严格相等。

内容的提问来源于stack exchange,提问作者santosh yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 22:34:56