美文网首页
个人总结:浅谈js中的深拷贝

个人总结:浅谈js中的深拷贝

作者: 前端小帅 | 来源:发表于2020-05-28 19:00 被阅读0次

深拷贝

基本类型

在学习深拷贝和浅拷贝之前,一定要了解基本数据类型和引用数据类型
基本数据类型的数据都放在内存中,复制的时候就直接值复制。你可以理解为 “基站基栈”。

在这里插入图片描述

引用类型

引用类型的数据存放在堆中,栈内存中只存放具体的地址值,object1赋值给object2的时候是把object1的地址值赋值给了object2,这个时候两个对象同时指向堆内存中的同一数据。

var object1 = new Object();
var object2 = object1;
在这里插入图片描述

深拷贝和浅拷贝的区别

浅拷贝和深拷贝都是相对于引用类型来说的。
浅拷贝:你可以理解为值的复制,在引用类型中,浅拷贝只是将值进行复制,两个对象还是指向同一个堆内存空间
深拷贝:可以理解为循环复制,深拷贝可以对对象的属性进行递归复制;

实现深拷贝的方式

1.Object.assign

Object.assign({}, obj1):先建立一个空对象{},接着把obj1中所有的属性复制过去,所以obj2会长得跟obj1一样,这时候再修改obj2.b也不会影响obj1。
局限:对象只有一层的时候 是深拷贝。

 var obj1 = {
    a: 1,
    b: 2,
    c: 3
}
var obj2 = Object.assign({}, obj1);
obj2.b = 5;
console.log(obj1.b); // 2
console.log(obj2.b); // 5

2.JSON.parse+JSON.stringify

用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象。
局限: Number, String, Boolean, Array,可以转为JSON对象,但是function 这种不行。

3.lodash实现深拷贝

lodash很热门的函数库,提供了 lodash.cloneDeep()实现深拷贝

4.递归拷贝

function deepclone(obj){
if(typeof obj==='object'){
var result = obj.constructor=='Array'?[]:{};
for(let i in obj){
result[i] = typeof result[i]==-'object'?deepclone(result[i]):result[i]
}
}else{
var result = obj
}
return result 
}

相关文章

  • 个人总结:浅谈js中的深拷贝

    深拷贝 基本类型 在学习深拷贝和浅拷贝之前,一定要了解基本数据类型和引用数据类型基本数据类型的数据都放在栈内存中,...

  • JS中的深拷贝与浅拷贝

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

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

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

  • copy和mutablecopy

    Objective-C中的浅拷贝和深拷贝 - CocoaChina_让移动开发更简单 iOS 浅谈:深.浅拷贝与c...

  • 浅拷贝和深拷贝

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

  • 浅谈js中的深拷贝与浅拷贝

    什么是深拷贝,什么是浅拷贝 说到深浅拷贝,就不得不提到另外一个知识点,那就是引用类型和基本类型以及堆和栈的区别。再...

  • 浅谈JS浅拷贝&深拷贝

    深拷贝 方案一 : 方案二:用JSON.stringify转为字符串 再用JSON.parse把字符串再转为新的对...

  • 浅谈JS深拷贝(深克隆)

    在学习深拷贝之前,我们要先搞明白什么是深拷贝? 在JS中,数据类型分为基本数据类型和引用数据类型两种,对于基本数据...

  • 深拷贝和浅拷贝

    1: iOS开发 深拷贝与浅拷贝 2: iOS 浅谈:深.浅拷贝与copy.strong 3: iOS开发——深...

  • iOS 深拷贝与浅拷贝

    本文参考 iOS浅谈:深.浅拷贝与copy.strong这一篇总结的不太到位,可以继续读下一篇 在iOS中关于深拷...

网友评论

      本文标题:个人总结:浅谈js中的深拷贝

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