Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

解构复制对象, 是深拷贝还是浅拷贝【热度: 411】 #1054

Open
yanlele opened this issue Nov 6, 2024 · 0 comments
Open

解构复制对象, 是深拷贝还是浅拷贝【热度: 411】 #1054

yanlele opened this issue Nov 6, 2024 · 0 comments
Labels
JavaScript JavaScript 语法部分
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented Nov 6, 2024

关键词:结构复制对象

浅拷贝

举例:

const obj = {
  prop1: "value1",
  prop2: {
    nestedProp: "nestedValue",
  },
};

// 使用扩展运算符进行复制
const obj2 = { ...obj };

console.log("原始对象 obj:", obj);
console.log("复制后的对象 obj2:", obj2);

// 修改基本类型属性
obj2.prop1 = "newValue1";
console.log("修改基本类型属性后:");
console.log("原始对象 obj:", obj);
console.log("复制后的对象 obj2:", obj2);

// 修改嵌套对象的属性
obj2.prop2.nestedProp = "newNestedValue";
console.log("修改嵌套对象属性后:");
console.log("原始对象 obj:", obj);
console.log("复制后的对象 obj2:", obj2);

解释如下:

  1. 首先定义了一个对象obj,它包含一个基本类型属性prop1和一个嵌套对象属性prop2
  2. 使用扩展运算符{...obj}创建了一个新的对象obj2,这看起来像是对obj进行了复制。
  3. 当修改obj2的基本类型属性prop1时,原始对象objprop1不受影响。这是因为基本类型的值在复制时是按值复制的。
  4. 然而,当修改obj2的嵌套对象属性prop2.nestedProp时,原始对象objprop2.nestedProp也被修改了。这是因为扩展运算符对于嵌套对象只是复制了引用,而不是创建一个全新的嵌套对象副本,所以这是浅拷贝的行为。
@yanlele yanlele added the JavaScript JavaScript 语法部分 label Nov 6, 2024
@yanlele yanlele added this to the milestone Nov 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScript JavaScript 语法部分
Projects
None yet
Development

No branches or pull requests

1 participant