JavaScript中浅拷贝和深拷贝的区别和实现
栏目: JavaScript · 发布时间: 6年前
内容简介:要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型。JavaScript有两种数据类型,基础数据类型和引用数据类型。1. 基础数据类型: undefined、boolean、number、string、null,保存在栈内存中的简单数据2. 引用数据类型:Array、对象、Function,保存在堆内存空间中
前言
要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型。JavaScript有两种数据类型,基础数据类型和引用数据类型。
1. 基础数据类型: undefined、boolean、number、string、null,保存在栈内存中的简单数据
2. 引用数据类型:Array、对象、Function,保存在堆内存空间中
概述
如下图:
注释:
a1 = 0;a2 = 'this is str';a3 = null, 存放在栈内存中;
var c =[1,2,3] 与 var d = {m:20} ,**变量名与内存地址存储在栈内存中**,**但是**[1,2,3]与{m:20} 作为**对象存储在堆内存中**;
基础数据类型的复制
var a = 20;
var b = a;
如下图:
引用数据类型的复制
var m ={ a:10, b:20};
var n = m;
m与n指向同一个内存空间,当m或者n改变时,另一个也跟着改变
如
m.a = 'web秀';
console.log(n.a);
// 输出 web秀
怎么样使引用数据类型有各自独立的内存空间???
深度拷贝方法
采用递归的方法拷贝对象
## 奇技淫巧
利用**基础数据类型**方式,把对象转换成字符串,进行复制。具体点说就是,用JSON.stringify与JSON.parse实现深拷贝。原因是JSON.stringify(obj)转换成字符串,变成基本数据类型,基本类型拷贝是直接在栈内存新开空间,直接复制一份名-值,不影响之前的对象。请看代码:
总结
1. 浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;
2. 深拷贝(deep copy):复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变;
实现深拷贝主要有2种方法
(1)递归
(2)JSON.stringify结合JSON.parse
【责任编辑:庞桂玉 TEL:(010)68476606】
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 实现深拷贝
- JS深拷贝的实现
- javascript系列--Object.assign实现浅拷贝的原理以及实现
- 【进阶4-4期】Lodash是如何实现深拷贝的
- 【进阶4-3期】面试题之如何实现一个深拷贝
- JavaScript深拷贝、浅拷贝
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
最优化导论
Edwin K. P. Chong、Stanislaw H. Zak / 孙志强、白圣建、郑永斌、刘伟 / 电子工业出版社 / 2015-10 / 89.00
本书是一本关于最优化技术的入门教材,全书共分为四部分。第一部分是预备知识。第二部分主要介绍无约束的优化问题,并介绍线性方程的求解方法、神经网络方法和全局搜索方法。第三部分介绍线性优化问题,包括线性优化问题的模型、单纯形法、对偶理论以及一些非单纯形法,简单介绍了整数线性优化问题。第四部分介绍有约束非线性优化问题,包括纯等式约束下和不等式约束下的优化问题的最优性条件、凸优化问题、有约束非线性优化问题的......一起来看看 《最优化导论》 这本书的介绍吧!