当前位置:   article > 正文

vue深拷贝的三种实现方式_vue 深拷贝

vue 深拷贝

vue深拷贝的三种实现方式:1、通过递归方式实现深拷贝;2、JSON.parse(JSON.stringify(obj));3、jQuery的extend方法实现深拷贝。深拷贝:拷贝的是对象或者数组内部数据的实体,重新开辟了内存空间存储数据;浅拷贝:拷贝的是引用类型的指针,副本和原数组或对象指向同一个内存;

1、通过递归方式实现深拷贝

比较全面的深拷贝,缺点是较为繁琐

  1. function deepClone(obj) {
  2. var target = {};
  3. for (var key in obj) {
  4. if (Object.prototype.hasOwnProperty.call(obj, key)) {
  5. if (typeof obj[key] === 'object') {
  6. target[key] = deepClone(obj[key]);
  7. } else {
  8. target[key] = obj[key];
  9. }
  10. }
  11. }
  12. return target;
  13. }

2、JSON.parse(JSON.stringify(obj))

满足一般使用场景,但无法实现对象中方法(fountion)的深拷贝

  1. let obj = {
  2. id: 1,
  3. name: '张三',
  4. age: 10,
  5. }
  6. let newObj = JSON.parse(JSON.stringify(obj))

3、jQuery的extend方法实现深拷贝

  1. var array = [1,2,3,4];
  2. var newArray = $.extend(true,[],array); // true为深拷贝,false为浅拷贝

拓展阅读

vue深拷贝的其他实现方式

1、Object.assign(obj1, obj2)

只有一级属性为深拷贝,二级属性后就是浅拷贝

  1. let obj = {
  2. id: 1,
  3. name: '张三',
  4. age: 10,
  5. }
  6. let newObj = Object.assign({}, obj)

2、扩展运算符

只有一级属性为深拷贝,二级属性后就是浅拷贝

  1. var obj = {
  2. a: 1,
  3. b: 2
  4. }
  5. var obj1 = {…obj}

3、数组使用数组方法进行深拷贝(concat、slice)

只有一级属性为深拷贝,二级属性后就是浅拷贝,如[1,2,3,[1,2,3]]

  1. var arr1 = [1, 2, 3, 4]
  2. var arr2 = arr1.concat()
  3. var arr3 = arr1.slice(1)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/372519
推荐阅读
相关标签
  

闽ICP备14008679号