美文网首页
JS的深拷贝和浅拷贝

JS的深拷贝和浅拷贝

作者: 初级切图仔 | 来源:发表于2019-09-27 16:18 被阅读0次

深拷贝与浅拷贝的区别:例如B复制了A,如果A改变了,B也跟着改变,则是浅拷贝;如果A改变了,B没有改变,则是深拷贝。

深拷贝会拷贝所有层级的属性

(1).JSON.stringfy和JSON.parse来回转换一次可以实现深拷贝;

代码示例:

let a = [1,2,3,[4,5],6]; //多层数组

let A = JSON.stringify(a); //JSON.stringify转换

let b = JSON.parse(A);    //JSON.parse转换

console.log(a,b)

a[0] = 2;

console.log(a,b);

输入结果如图1,图2;

图1 图2

由此可见此次拷贝为深拷贝

(2).使用递归循环来为数组赋值也可实现深拷贝

let a = [1,2,3,4,5,[6,7],8,9];

function deepClone(obj){

let b = Array.isArray(obj)?[]:{};  //判断传入数据的格式是否为array

for(key in obj){    //遍历数组

if(obj[key] && typeof obj[key] === "object"){  //如果该索引下存在数据切类型为object,再次调用改函数来循环内部的数组

b[key] = deepClone(obj[key]);

}else{

b[key] = obj[key]    //其他情况下为新数组赋值

}

}

return b;    //返回递归完成的数据

}

let b = deepClone(a);

console.log(a,b);

a[0] = 2;

a[5][0] = 1;

console.log(a,b);

输出结果如图3,图4;

图3 图4

由此可见,递归之后所得的数据为深拷贝。

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • JS实现深拷贝、instanceof、判断是否为数组

    JS深拷贝 JS中拷贝对象可以按照拷贝的程度可以分为浅拷贝和深拷贝,有些时候我们需要拷贝之后的对象和拷贝之前的对象...

  • JS中对象的复制

    JS中的对象复制分为两种情况:深拷贝和浅拷贝。深拷贝和浅拷贝的区别在于对数组和对象的拷贝,对它们拷贝时浅拷贝只是拷...

  • iOS深拷贝(MutableCopy)与浅拷贝(Copy)的区别

    深拷贝和浅拷贝的概念 iOS中有深拷贝和浅拷贝的概念,那么何为深拷贝何为浅拷贝呢?浅拷贝:浅拷贝并不拷贝对象本身,...

  • 通过jQuery中.extend()方法理解深拷贝

    所谓深拷贝和浅拷贝最大的区别就是js中有简单类型和引用类型的区分,对于简单类型不存在深拷贝和浅拷贝的区分,对于引用...

  • 2020前端高频面试题总结(附答案)

    [ js基础题 ] 1. new的实现原理是什么? 2. 深拷贝和浅拷贝的区别是什么 深拷贝 浅拷贝 3. bin...

  • iOS面试题-第二页

    11.深拷贝和浅拷贝的理解. 深拷贝;拷贝的内容. 浅拷贝:拷贝的指针. 深拷贝如: NSMutableDicti...

  • iOS - copy 与 mutableCopy

    一说到拷贝,就不得不提浅拷贝和深拷贝。 何谓浅拷贝?何谓深拷贝? 往简单的说: 浅拷贝:拷贝地址。 深拷贝:拷贝内...

网友评论

      本文标题:JS的深拷贝和浅拷贝

      本文链接:https://www.haomeiwen.com/subject/najoectx.html