对象字面量{}等价于new object(),其__proto__严格指向object.prototype,所有基础字面量均绑定对应内置原型并最终链向object.prototype;属性查找走标准原型链,不可绕过但可切断(如object.create(null));不使用隐藏类,创建快且开销小。

对象字面量(如 { name: '张三', age: 28 })在原型链机制下,看似简单,实则每一步都严格遵循 JavaScript 的原型初始化规则。它不是“无中生有”,而是隐式、确定、可追溯的原型绑定过程。
字面量本质是 new Object() 的语法糖
引擎看到 {},会立即执行等价于 new Object() 的操作——创建一个空对象,并将其内部 [[Prototype]](即 __proto__)指向 Object.prototype。这不是约定,而是语言规范强制行为。
-
{}、new Object()、Object.create(Object.prototype)三者创建的对象,__proto__完全相同 - 所有基础字面量(
[]、/regex/、function(){})也各自绑定对应内置原型(Array.prototype、RegExp.prototype、Function.prototype),但最终都链向Object.prototype
属性查找完全走标准原型链
当你访问 obj.toString() 或 obj.hasOwnProperty('name') 时,obj 自身没有这些方法,引擎自动沿 obj.__proto__ → Object.prototype → null 查找。整个过程不涉及拷贝、不触发计算,只是指针跳转。
- 查不到就返回
undefined,不会报错 - 哪怕你删掉
obj.toString,调用仍有效——因为实际执行的是Object.prototype.toString
无法绕过 Object.prototype,但可以切断原型链
绝大多数字面量对象默认继承自 Object.prototype,这是 JS 设计使然:所有对象需具备基本能力(如 toString、hasOwnProperty)。但你可以显式打破这条链:
-
Object.create(null)创建的对象,__proto__直接为null,不继承任何方法 - 这种对象常用于纯哈希表场景(如 Map 替代品),避免被
Object.prototype上的属性干扰
没有隐藏类参与,但有更轻量的内部优化
与构造函数实例不同,字面量对象不走 V8 的隐藏类(hidden class)转换路径。它不经历 M0 → M1 → M2 的结构演化,因为字面量结构在解析时已完全确定。
- 引擎直接为其分配固定内存布局,只存键值对和指向
Object.prototype的指针 - 这也意味着:同结构字面量之间无法共享隐藏类缓存,但单个字面量创建极快、开销极小
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











