推荐答案
在 JavaScript 中,合并对象可以通过多种方式实现。以下是几种常见的方法:
1. 使用 Object.assign()
const obj1 = { a: 1, b: 2 }; const obj2 = { b: 3, c: 4 }; const mergedObj = Object.assign({}, obj1, obj2); console.log(mergedObj); // 输出: { a: 1, b: 3, c: 4 }
2. 使用扩展运算符 (...
)
const obj1 = { a: 1, b: 2 }; const obj2 = { b: 3, c: 4 }; const mergedObj = { ...obj1, ...obj2 }; console.log(mergedObj); // 输出: { a: 1, b: 3, c: 4 }
3. 使用 JSON.parse()
和 JSON.stringify()
(深拷贝)
const obj1 = { a: 1, b: { x: 1 } }; const obj2 = { b: { y: 2 }, c: 4 }; const mergedObj = JSON.parse(JSON.stringify({ ...obj1, ...obj2 })); console.log(mergedObj); // 输出: { a: 1, b: { y: 2 }, c: 4 }
本题详细解读
Object.assign()
Object.assign()
方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它会返回目标对象。
- 语法:
Object.assign(target, ...sources)
- 特点:
- 浅拷贝:如果源对象的属性值是对象,则拷贝的是引用。
- 会覆盖目标对象中已有的属性。
扩展运算符 (...
)
扩展运算符 (...
) 可以将一个对象的属性展开到另一个对象中。
- 语法:
{ ...obj1, ...obj2 }
- 特点:
- 浅拷贝:与
Object.assign()
类似,如果属性值是对象,则拷贝的是引用。 - 语法简洁,易于理解。
- 浅拷贝:与
JSON.parse()
和 JSON.stringify()
通过 JSON.stringify()
将对象转换为字符串,再通过 JSON.parse()
将字符串转换回对象,可以实现深拷贝。
- 语法:
JSON.parse(JSON.stringify(obj))
- 特点:
- 深拷贝:完全复制对象及其嵌套对象。
- 无法复制函数、
undefined
、Symbol
等特殊类型的值。
选择合适的方法
- 如果需要浅拷贝,推荐使用
Object.assign()
或扩展运算符。 - 如果需要深拷贝,推荐使用
JSON.parse()
和JSON.stringify()
,但要注意其局限性。