JavaScript中浅拷贝和深拷贝的区别和实现

栏目: JavaScript · 发布时间: 7年前

内容简介:要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型。JavaScript有两种数据类型,基础数据类型和引用数据类型。1. 基础数据类型: undefined、boolean、number、string、null,保存在栈内存中的简单数据2. 引用数据类型:Array、对象、Function,保存在堆内存空间中

前言

要理解 JavaScript中浅拷贝和深拷贝的区别,首先要明白JavaScript的数据类型。JavaScript有两种数据类型,基础数据类型和引用数据类型。

1. 基础数据类型: undefined、boolean、number、string、null,保存在栈内存中的简单数据

2. 引用数据类型:Array、对象、Function,保存在堆内存空间中

概述

如下图:

JavaScript中浅拷贝和深拷贝的区别和实现

注释:

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;

如下图:

JavaScript中浅拷贝和深拷贝的区别和实现

引用数据类型的复制

var m ={ a:10, b:20};

var n = m;

JavaScript中浅拷贝和深拷贝的区别和实现

m与n指向同一个内存空间,当m或者n改变时,另一个也跟着改变

m.a = 'web秀';

console.log(n.a);

// 输出 web秀

怎么样使引用数据类型有各自独立的内存空间???

深度拷贝方法

采用递归的方法拷贝对象

JavaScript中浅拷贝和深拷贝的区别和实现

## 奇技淫巧

利用**基础数据类型**方式,把对象转换成字符串,进行复制。具体点说就是,用JSON.stringify与JSON.parse实现深拷贝。原因是JSON.stringify(obj)转换成字符串,变成基本数据类型,基本类型拷贝是直接在栈内存新开空间,直接复制一份名-值,不影响之前的对象。请看代码:

JavaScript中浅拷贝和深拷贝的区别和实现

总结

1. 浅拷贝(shallow copy):只复制指向某个对象的指针,而不复制对象本身,新旧对象共享一块内存;

2. 深拷贝(deep copy):复制并创建一个一摸一样的对象,不共享内存,修改新对象,旧对象保持不变;

实现深拷贝主要有2种方法

(1)递归

(2)JSON.stringify结合JSON.parse

【责任编辑:庞桂玉 TEL:(010)68476606】


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

让云落地

让云落地

【美】Michael J. Kavis(迈克尔 J.凯维斯) 著 / 陈志伟、辛敏 / 电子工业出版社 / 2016-3 / 65.00元

云计算落地已成事实。从前几年的概念普及,到如今越来越多的企业将业务迁移至云上,云计算正在改变整个社会的信息资源使用观念和方式。云计算还在不断成长,技术细节也在不断变化之中。对于使用者而言,能够基于自身的业务、技术和组织需求等各方面情况,选择正确的云服务模式,是成功使用云计算最关键的技术决策之一。 《让云落地:云计算服务模式(SaaS、PaaS和IaaS)设计决策》共有 16 章,作者有意避开......一起来看看 《让云落地》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具