JavaScript深浅拷贝(三种方法)
2021/11/20 12:09:45
本文主要是介绍JavaScript深浅拷贝(三种方法),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
深浅拷贝实现方法(三种)
提示:
JavaScript中的深浅拷贝实现方法(三种)
文章目录
- 深浅拷贝实现方法(三种)
- 前言
- 一、如下图所示(图片非自己制作)
- 二、深拷贝方法的实现(三种方法)
- 1.通过递归的方式实现深拷贝(jquery中的extend)
- 2.使用JSON.parse()和JSON.stringify()
- 3.通过递归的方式实现深拷贝
前言
基本数据类型:数据存储在栈中。
引用数据类型:数据存放在堆内存中,栈中存放了一个引用地址,指向堆内存中的数据。
引用数据赋值,a 在栈区中,使用了 *b * 的引用地址(堆内存中存在引用地址,后续会出文章讲述,堆与栈的一个区别),
浅拷贝 相当于栈区中有一个变量,直接复制了另外一个变量的值 / 指向另外一个变量的引用地址。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
深拷贝 深拷贝会拷贝目标对象的所有的属性,并拷贝属性指向的动态分配的内存。拷贝后的内容,不再相互影响.
一、如下图所示(图片非自己制作)
二、深拷贝方法的实现(三种方法)
1.通过递归的方式实现深拷贝(jquery中的extend)
代码如下(示例):首先需要引入jquery
// 3 用过jquery的extend方法 // $.extend(deep,target,object,[objectN]) // 参数一 为turn表示为深拷贝,false为浅拷贝 // 参数二 目标对象 用来存放需要拷贝对象的属性 // 参数三 参数四 要拷贝的对象 var student1 = { name:"张三", age:18, work:function(){ console.log("学习"); } }; //开始深拷贝 var student2 = $.extend(true,{},student1) //修改拷贝后对象中的值 student2.name="李四" student2.work=function(){ console.log("上号"); } console.log(student1,student2);
2.使用JSON.parse()和JSON.stringify()
代码如下(示例):
var student1 = { name:"张三", age:18, work:function(){ console.log("学习"); } } //定义拷贝的方法(其实就是把对象转化为json字符串,再转化为json对象格式) function deepClone(obj){ var obj1= JSON.stringify(obj) var objClone = JSON.parse(obj1) return objClone } //调用深拷贝 var student2 = deepClone(student1) student2.name="李四" student2.work=function(){ console.log("上号"); } student1.work() student2.work() console.log(student1,student2);
3.通过递归的方式实现深拷贝
//对象B复制了对象A,如果B的属性改变了,A的属性也跟着改变了,这就是浅拷贝,如果B的属性改变了 //A的属性没发生改变,这就是深拷贝 // 基本数据类型:number string boolean null undefined 等 // 引用数据类型:对象 除了基本数据类型都属于引用数据类型 常见的有 数组、对象、函数等 // 1 通过递归实现深拷贝 function deepClone(obj) { var objClone = Array.isArray(obj) ? [] : {}; if (obj && typeof obj == "object") { for (key in obj) { if (obj.hasOwnProperty(key)) { if (obj[key] && typeof obj[key] == "object") { objClone[key] = deepClone(obj[key]); } else { objClone[key] = obj[key] } } } } return objClone; } var arr1 =[1,2,3,4] var arr2 = deepClone(arr1) arr2[0]=5 console.log(arr1,arr2);
这篇关于JavaScript深浅拷贝(三种方法)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-06数据结构和算法面试题详解与实战
- 2024-11-06数据结构与算法面试题详解及练习
- 2024-11-06网络请求面试题详解及实战技巧
- 2024-11-06数据结构和算法面试真题详解及备考指南
- 2024-11-06数据结构与算法面试真题解析与练习指南
- 2024-11-06网络请求面试真题详解及实战攻略
- 2024-11-06数据结构和算法大厂面试真题详解与实战
- 2024-11-06数据结构与算法大厂面试真题详解及入门攻略
- 2024-11-06网络请求大厂面试真题详解及应对策略
- 2024-11-06TS大厂面试真题解析与实战指南