解释JS中的深拷贝与浅拷贝
时间: 2023-11-02 19:06:42 浏览: 90
在 JS 中,深拷贝和浅拷贝是两个常用的对象复制方式。
浅拷贝是指将原对象的引用复制给新对象,这样新对象和原对象会指向同一块内存地址。当修改新对象时,原对象也会跟着改变。常见的浅拷贝方式有 Object.assign 和展开运算符(...)
例如:
```
let obj1 = { name: 'John', age: 30 };
let obj2 = Object.assign({}, obj1); // 使用 Object.assign 进行浅拷贝
obj2.age = 32; // 修改新对象的属性值
console.log(obj1.age); // 输出 30,原对象并未被修改
console.log(obj2.age); // 输出 32,新对象的属性值已被修改
```
而深拷贝则是完全复制一份原对象,新对象的修改不会影响到原对象。常见的深拷贝方式有 JSON.parse(JSON.stringify(obj))、递归复制等。
例如:
```
let obj1 = { name: 'John', age: 30 };
let obj2 = JSON.parse(JSON.stringify(obj1)); // 使用 JSON.parse 和 JSON.stringify 进行深拷贝
obj2.age = 32; // 修改新对象的属性值
console.log(obj1.age); // 输出 30,原对象并未被修改
console.log(obj2.age); // 输出 32,新对象的属性值已被修改
```
需要注意的是,使用 JSON.parse 和 JSON.stringify 进行深拷贝时,会忽略 undefined、函数、Symbol 和循环引用等。因此,在实际开发中,可能需要使用其他的深拷贝方式。
阅读全文