Object.getPrototypeOf对原始类型先装箱再获取原型,如"hello"返回String.prototype;Symbol和BigInt同理;null和undefined则抛出TypeError。

Object.getPrototypeOf 对原始类型值(如字符串、数字、布尔值等)会先进行装箱操作,再获取其对应包装对象的原型。
原始类型会被自动装箱为对象
JavaScript 中的原始类型本身没有原型链,但 Object.getPrototypeOf 内部会尝试将其转换为对应的包装对象(如 String、Number、Boolean),然后返回该包装对象的原型。
-
Object.getPrototypeOf("hello")→ 返回String.prototype -
Object.getPrototypeOf(42)→ 返回Number.prototype -
Object.getPrototypeOf(true)→ 返回Boolean.prototype -
Object.getPrototypeOf(null)或undefined会抛出TypeError
Symbol 和 BigInt 的行为一致
ES2015+ 引入的原始类型 Symbol 和 BigInt 同样适用装箱规则:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
Object.getPrototypeOf(Symbol("a"))→Symbol.prototype -
Object.getPrototypeOf(123n)→BigInt.prototype
undefined 和 null 是例外
它们无法被装箱成有效对象,因此调用会直接报错:
立即学习“Java免费学习笔记(深入)”;
-
Object.getPrototypeOf(undefined)→TypeError: Cannot convert undefined or null to object -
Object.getPrototypeOf(null)→ 同上
与 Object.prototype.toString 的对比更清晰
这种行为和 Object.prototype.toString.call(x) 类似:都依赖内部抽象操作 ToObject。区别在于 toString 只读取 [Symbol.toStringTag] 并返回字符串,而 getPrototypeOf 真实返回原型对象。

















