Object.create(null) --> "纯净对象"

Object.create(null) 创建的对象可以被称为

纯净对象(pure object 或 dictionary object)

基本概念

Object.create(null) 会创建一个没有原型链的对象,即这个对象不会继承自 Object.prototype

ts 复制代码
const obj = Object.create(null);

与常规对象的区别

  1. 常规对象创建

    ts 复制代码
    const obj1 = {}; // 或 new Object()
    // 等同于
    const obj1 = Object.create(Object.prototype);

这种对象会继承 Object.prototype 的方法,如 toString(), hasOwnProperty() 等。

  1. Object.create(null)创建的对象

    ts 复制代码
    const obj2 = Object.create(null);

这种对象完全不继承任何属性或方法,是一个真正的"空"对象。

主要特点

  1. 没有原型链

    • Object.getPrototypeOf(obj2) 返回 null
    • 'toString' in obj2 返回 false
  2. 更纯净的对象

    • 不会意外访问到继承的属性/方法
    • 适合用作纯粹的键值对存储
  3. 性能优势

    • 由于没有原型链查找,属性访问可能稍微快一些
  4. 无原型污染

    • 完全脱离原型链,不继承 Object.prototype 的任何属性/方法
    • 避免了原型属性可能带来的命名冲突
  5. 完全空白的起点

    • 创建时对象上绝对没有任何属性 (包括 __proto__
    • 只有开发者显式添加的属性会存在
  6. 行为可预测

    • 不会有意外的原型方法干扰(如 toString, hasOwnProperty 等)
    • 适合作为纯粹的键值存储(类似 Map 的用途)
相关推荐
谢尔登9 分钟前
10_从 React Hooks 本质看 useState
前端·ubuntu·react.js
辰同学ovo10 分钟前
从全局登录状态管理学习 Redux
前端·javascript·学习·react.js
爱看书的小沐14 分钟前
【小沐杂货铺】基于Three.js绘制三维艺术画廊3DArtGallery (Three.js,WebGL)
javascript·3d·webgl·three.js·babylon.js·三维画廊
陈随易32 分钟前
2年没用Nodejs了,Bun很香
前端·后端·程序员
donecoding1 小时前
Corepack 完全解析:从懵到懂,包管理器自由了
前端·node.js·前端工程化
yqcoder1 小时前
端经典面试题:为什么 0.1 + 0.2 !== 0.3?
前端·css
ZC跨境爬虫1 小时前
跟着 MDN 学 HTML day_12:(HTML网页图片嵌入)
前端·javascript·css·ui·html
光影少年1 小时前
reeact虚拟DOM、Diff算法原理、key的作用与为什么不能用index
前端·react.js·掘金·金石计划
用户059540174461 小时前
大模型记忆存储踩坑实录:LangChain 的 ConversationBufferMemory 让我排查了 6 小时
前端·css
是上好佳佳佳呀1 小时前
【前端(十二)】JavaScript 函数与对象笔记
前端·javascript·笔记