Object.create(null)
创建的对象可以被称为
纯净对象(pure object 或 dictionary object)
基本概念
Object.create(null)
会创建一个没有原型链的对象,即这个对象不会继承自 Object.prototype
。
ts
const obj = Object.create(null);
与常规对象的区别
-
常规对象创建:
tsconst obj1 = {}; // 或 new Object() // 等同于 const obj1 = Object.create(Object.prototype);

这种对象会继承 Object.prototype
的方法,如 toString()
, hasOwnProperty()
等。
-
Object.create(null)
创建的对象:tsconst obj2 = Object.create(null);

这种对象完全不继承任何属性或方法,是一个真正的"空"对象。
主要特点
-
没有原型链:
Object.getPrototypeOf(obj2)
返回null
'toString' in obj2
返回false
-
更纯净的对象:
- 不会意外访问到继承的属性/方法
- 适合用作纯粹的键值对存储
-
性能优势:
- 由于没有原型链查找,属性访问可能稍微快一些
-
无原型污染:
- 完全脱离原型链,不继承
Object.prototype
的任何属性/方法 - 避免了原型属性可能带来的命名冲突
- 完全脱离原型链,不继承
-
完全空白的起点:
- 创建时对象上绝对没有任何属性 (包括
__proto__
) - 只有开发者显式添加的属性会存在
- 创建时对象上绝对没有任何属性 (包括
-
行为可预测:
- 不会有意外的原型方法干扰(如
toString
,hasOwnProperty
等) - 适合作为纯粹的键值存储(类似 Map 的用途)
- 不会有意外的原型方法干扰(如