展开运算符

发布: (2026年2月4日 GMT+8 11:49)
3 min read
原文: Dev.to

Source: Dev.to

使用展开运算符合并数组

const array1 = [1, 2, 3];
const array2 = [4, 5, 6];

const mergedArray = [...array1, ...array2];

console.log(mergedArray); // Output: [1, 2, 3, 4, 5, 6]

展开运算符会将 array1array2 的元素展开到一个新数组中,从而生成一个合并后的列表,并且不会改变原始数组。

使用展开运算符合并对象

属性覆盖规则

合并对象时,后面的(最右侧)对象的属性会覆盖前面对象中相同键的属性。

const obj1 = { name: "Alice", age: 30 };
const obj2 = { city: "New York", age: 35 };

const mergedObj = { ...obj1, ...obj2 };

console.log(mergedObj);
// Output: { name: "Alice", age: 35, city: "New York" }

在此示例中,obj2age 替代了 obj1age

浅拷贝行为

展开运算符创建的是 拷贝。嵌套对象仍然是对原始对象的引用。

const obj1 = { name: "Alice", details: { hobby: "reading" } };
const obj2 = { city: "New York", details: { hobby: "hiking" } };

const mergedObj = { ...obj1, ...obj2 };

mergedObj.details.hobby = "painting";

console.log(obj1.details.hobby); // Output: "painting"

mergedObj 中修改嵌套属性也会影响 obj1,因为嵌套对象没有被深度克隆。

示例:合并用户对象

const user1 = {
  name: "John",
  age: 40,
  admin: true,
};

const user2 = {
  name: "Dow",
  age: 35,
};

const mergedUser = {
  ...user1,
  ...user2,
};

console.log(mergedUser);
// Output: { name: 'Dow', age: 35, admin: true }

这里,user2nameage 覆盖了 user1 中对应的属性,而 user1admin 标志则被保留下来。

注意: 展开运算符在合并数组和对象时非常简洁,但其浅拷贝的特性意味着嵌套结构仍然与原始对象相连。若需要深度合并,请考虑使用 Object.assign(配合手动递归)或诸如 lodash.merge 之类的实用库。

Back to Blog

相关文章

阅读更多 »

JavaScript 对象与方法

什么是对象中的方法?方法是存在于对象内部的函数。可以把对象想象成一个工具箱,方法就是里面的工具。javascript...

useReducer 与 useState

useState JavaScript const contactName, setContactName = useState''; const contactImage, setContactImage = useStatenull; const contactImageUrl, setContactImageU...