js对象展开 实现
对象展开(Spread Operator)的基本用法
对象展开运算符(...)用于将一个对象的可枚举属性拷贝到另一个对象中。这是ES6引入的特性,常用于对象的浅拷贝或合并。
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };
// obj2 = { a: 1, b: 2, c: 3 }
合并多个对象
可以通过连续使用展开运算符合并多个对象。当属性名冲突时,后展开的对象属性会覆盖前面的。
const objA = { x: 1, y: 2 };
const objB = { y: 3, z: 4 };
const merged = { ...objA, ...objB };
// merged = { x: 1, y: 3, z: 4 }
浅拷贝注意事项
展开运算符创建的是浅拷贝,嵌套对象仍保持引用关系。

const original = { a: 1, nested: { b: 2 } };
const copy = { ...original };
copy.nested.b = 3;
// original.nested.b 也会变为3
添加新属性
可以在展开时直接添加新属性,位置决定了优先级(后定义的属性优先级更高)。
const base = { id: 100 };
const extended = { ...base, name: 'Example', id: 101 };
// extended = { id: 101, name: 'Example' }
条件展开
通过结合三元运算符实现条件展开,这在React的props传递中很常见。

const extraProps = shouldInclude ? { flag: true } : {};
const obj = { ...base, ...extraProps };
与数组展开的区别
虽然语法相似,但对象展开只拷贝自身可枚举属性,而数组展开适用于可迭代对象。
const arr = [1, 2, 3];
const obj = { ...arr }; // {0: 1, 1: 2, 2: 3}
浏览器兼容性
对于旧环境需要Babel等工具转译,或使用Object.assign()替代:
// 等效于展开运算符
const merged = Object.assign({}, obj1, obj2);






