javascript原型链终点是null,因为object.prototype.__proto__被明确规定为null,null作为原始值物理切断继承链,确保属性查找终止并提供容错行为。

JavaScript 中原型链的终点不是某个“对象”,而是 null。
为什么终点是 null,而不是 Object.prototype?
Object.prototype 是绝大多数对象原型链中最后一个有实际属性和方法的对象,但它本身仍有原型——即 Object.prototype.__proto__,这个值被语言明确规定为 null。所以真正终止查找的节点是 null,不是 Object.prototype。
-
{}的原型链:{} →Object.prototype→null -
new Date()、[]、/regex/等也一样,最终都落到Object.prototype,再往上就是null -
Object.prototype提供toString、hasOwnProperty等方法,但它的__proto__是null,表示“继承关系彻底结束”
null 作为终点的关键作用
null 不是对象,而是一个原始值,语义上代表“无”或“空引用”。它在原型链中承担不可替代的底层角色:
- 物理切断继承链,防止无限递归或循环引用(比如误设
A.__proto__ = A) - 引擎只需一次
=== null判断就能确认链是否终结,效率高且确定 - 保障属性查找失败时返回
undefined而不报错,提供一致的容错行为 - 让
instanceof、isPrototypeOf()等机制有明确收敛点
例外情况:Object.create(null) 创建的对象
这类对象跳过了 Object.prototype,原型链直接为:obj → null。
- 没有
toString、hasOwnProperty等默认方法 - 常用于哈希表、配置对象等需要完全干净原型的场景
- 验证方式:
Object.getPrototypeOf(obj) === null
怎么验证原型链终点?
可以用标准 API 逐层向上查,直到拿到 null:
-
Object.getPrototypeOf({})→ 返回Object.prototype -
Object.getPrototypeOf(Object.prototype)→ 返回null -
{}.constructor.prototype.__proto__也是null(注意:constructor 可能被改写,不推荐依赖)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











