对象字面量通过嵌套、计算属性名、简写语法、解构赋值与默认值,提升复杂数据结构的直观性、灵活性和健壮性,同时需注意引用类型带来的可变性问题。

用对象字面量声明复杂数据结构,核心是利用嵌套、简洁语法和动态属性,让代码更直观、易读、易维护。
嵌套对象直接表达层级关系
对象字面量天然支持嵌套,避免多次赋值或构造函数调用。比如用户信息含地址、订单列表、偏好设置时,可一次性写出完整结构:
- 用大括号 {} 表示对象,内部用冒号 : 分隔键值对
- 值可以是另一个对象、数组,甚至函数,实现多层嵌套
- 省去先声明空对象再逐个添加属性的步骤
示例:
name: "张三",
email: "zhang@example.com",
profile: {
age: 28,
city: "上海"
},
orders: [
{ id: "ORD001", total: 99.9 },
{ id: "ORD002", total: 129.5 }
],
settings: { theme: "dark", notifications: true }
};
计算属性名与简写提升灵活性
ES6 支持动态键名和属性简写,让字面量更贴合运行时需求:
- 方括号 [] 包裹表达式,实现键名动态生成(如变量、函数返回值)
- 同名变量直接写键名,自动作为键和值(name: name → name)
- 方法可省略 function 关键字,用 methodName() { ... } 语法
示例:
const key = "status";const value = "active";
const config = {
[key]: value, // 动态键名 → { status: "active" }
host, port, timeout, // 属性简写(假设这些变量已存在)
validate() { return this.timeout > 0; } // 方法简写
};
结合解构与默认值增强初始化健壮性
对象字面量常配合解构赋值使用,配合默认值可避免访问 undefined 引发错误:
- 解构时在等号右侧提供默认对象,防止源数据缺失
- 嵌套解构支持深层默认值(如 { profile: { city = "北京" } = {} } = data)
- 适合处理 API 返回的不完整响应或配置合并场景
示例:
const apiResponse = {user: { name: "李四" }
};
const {
user: { name, email = "no-email@example.com", profile = {} } = {},
meta = { version: "1.0" }
} = apiResponse;
// name → "李四", email → "no-email@example.com", profile → {}
避免常见陷阱:引用、深拷贝与可变性
对象字面量创建的是引用类型,多个变量可能指向同一内存地址:
- 直接赋值(const a = { x: 1 }; const b = a;)不会复制对象,修改 b.x 会影响 a.x
- 需深拷贝时,慎用 JSON.parse(JSON.stringify(obj))(丢失函数、undefined、Date 等),推荐 structuredClone()(现代环境)或专用库
- 初始化后若需冻结结构,可用 Object.freeze() 防止意外修改
示例(安全初始化):
const defaults = Object.freeze({timeout: 5000,
retries: 3
});
const options = { ...defaults, timeout: 8000 }; // 浅拷贝后扩展
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











