vue深拷贝和浅拷贝
时间: 2023-10-30 14:03:23 浏览: 121
深拷贝拷贝的是内容,浅拷贝拷贝的是指针
Vue 中的深拷贝和浅拷贝是在处理对象和数组时常用的两种复制方式。下面是它们的简要介绍:
1. 浅拷贝:浅拷贝是创建一个新对象或数组,将原始对象或数组的引用复制给新对象或数组,新旧对象或数组共享同一块内存空间。当修改其中一个对象或数组时,另一个也会受到影响。在 Vue 中,可以使用`Object.assign()`或解构赋值来实现浅拷贝。
示例代码:
```javascript
// 对象浅拷贝
let obj = { a: 1, b: 2 };
let newObj = Object.assign({}, obj);
console.log(newObj); // { a: 1, b: 2 }
// 数组浅拷贝
let arr = [1, 2, 3];
let newArr = [...arr];
console.log(newArr); // [1, 2, 3]
```
2. 深拷贝:深拷贝是创建一个新对象或数组,并将原始对象或数组的所有属性值递归地复制给新对象或数组,新旧对象或数组不共享内存空间。当修改其中一个对象或数组时,另一个不会受到影响。在 Vue 中,可以使用`JSON.parse(JSON.stringify())`或第三方库(如 lodash 的`cloneDeep()`方法)来实现深拷贝。
示例代码:
```javascript
// 对象深拷贝
let obj = { a: 1, b: { c: 2 } };
let newObj = JSON.parse(JSON.stringify(obj));
console.log(newObj); // { a: 1, b: { c: 2 } }
// 数组深拷贝
let arr = [1, [2, 3], { a: 4 }];
let newArr = JSON.parse(JSON.stringify(arr));
console.log(newArr); // [1, [2, 3], { a: 4 }]
```
需要注意的是,使用 `JSON.parse(JSON.stringify())` 进行深拷贝时,会忽略 undefined、symbol、函数等特殊值,并且无法处理引用循环的情况。在处理复杂对象或数组时,建议使用专门的深拷贝库来确保拷贝的完整性和准确性。
阅读全文