js对象展开 实现
对象展开语法(Spread Syntax)
对象展开语法(...)允许将一个对象的可枚举属性展开到另一个对象中,常用于合并、复制或覆盖对象属性。
基本用法
通过 ... 展开对象属性到新对象:
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 }; // { a: 1, b: 2, c: 3 }
合并对象
同名属性后展开的值会覆盖先前的值:

const obj1 = { a: 1, b: 2 };
const obj2 = { b: 3, c: 4 };
const merged = { ...obj1, ...obj2 }; // { a: 1, b: 3, c: 4 }
浅拷贝对象
展开语法实现对象的浅拷贝:
const original = { x: 1, y: { z: 2 } };
const copy = { ...original };
copy.y.z = 3; // 修改嵌套对象会影响原对象
console.log(original.y.z); // 3
覆盖属性
展开语法可覆盖已有属性:

const defaults = { theme: 'light', fontSize: 16 };
const userSettings = { theme: 'dark' };
const finalSettings = { ...defaults, ...userSettings }; // { theme: 'dark', fontSize: 16 }
动态添加属性
结合计算属性名动态添加属性:
const key = 'dynamicProp';
const obj = { ...{ [key]: 'value' } }; // { dynamicProp: 'value' }
注意事项
- 仅展开对象自身的可枚举属性(不包含原型链上的属性)。
- 嵌套对象是浅拷贝,修改嵌套属性会影响原对象。
- 适用于 ES2018(ES9)及更高版本。
兼容性处理
如需支持旧环境,可通过 Object.assign() 替代:
const merged = Object.assign({}, obj1, obj2);






