JavaScript原型链终点是null,即Object.prototype的[[Prototype]]被硬编码为null,调用Object.getPrototypeOf(Object.prototype)返回null,此后查找失败返回undefined。

JavaScript 中原型链通过 Object.prototype 追溯到顶层终点,本质是沿着每个对象的 [[Prototype]](即 __proto__ 或 Object.getPrototypeOf() 返回值)逐级向上查找,直到抵达一个明确的终止标记——null。这个 null 不是“缺失”或“错误”,而是规范强制设定的链尾信号。
Object.prototype 是所有对象的共同终点站
无论对象怎么创建:{}、new Date()、/regex/、自定义构造函数实例,它们的原型链最终都会汇聚到 Object.prototype。比如:
-
{}的__proto__直接等于Object.prototype -
[]的__proto__是Array.prototype,而Array.prototype.__proto__ === Object.prototype -
function(){}.__proto__是Function.prototype,其__proto__同样指向Object.prototype
终点不是 Object.prototype,而是它的 __proto__ === null
Object.prototype 本身仍是对象,但它不能再有上级原型。它的 [[Prototype]] 被引擎硬编码为 null:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
-
Object.prototype.__proto__ === null→ true -
Object.getPrototypeOf(Object.prototype) === null→ true - 一旦查到这一步还找不到属性,JS 就返回
undefined,不再继续
验证原型链终点的常用方式
可以用几行代码清晰看到整条路径:
立即学习“Java免费学习笔记(深入)”;
-
Object.getPrototypeOf({})→ 返回Object.prototype -
Object.getPrototypeOf(Object.getPrototypeOf({}))→ 返回null - 对任意对象反复调用
Object.getPrototypeOf,最终必得null - 注意:
__proto__非标准但广泛支持;Object.getPrototypeOf()是标准推荐方法
为什么必须是 null,不能是 undefined 或 {}?
因为只有 null 具备不可枚举、无属性、无 __proto__ 的特性,能作为唯一可靠的终止判断依据:
- 如果终点是
undefined,引擎无法安全区分“未定义”和“查到头了” - 如果终点是空对象
{},它仍有__proto__,会导致无限递归 -
null是 JS 中唯一原生的“无对象”值,语义干净,行为确定

















