深拷贝与浅拷贝
js中有两种数据类型:
1. 基本类型 : Number、String、Boolean、Null、Undefined
2. 复杂类型 : Object 、Array
深拷贝和浅拷贝只针对复杂类型的数据,因为基本类型数据的定义都会重新开辟新的内存。
浅拷贝拷贝的是内存地址,只是增加一个指针指向已有的内存,这时多个数据共用一个内存空间;
深拷贝是新增了指针并且新开辟了内存空间,新指针指向新的内存。
浅拷贝:
var a={
name:'WangJing',
sex:'女',
age:'25'
};
console.log(a.name);//'WangJing'
var b = a ;
b.name = '白子画';
console.log(a.name); //白子画--浅拷贝:拷贝的是内存地址,指针指向同一个内存空间,修改其中一个其他也会改变
修改对象b的属性值,对象a的属性值也会改变,这就是浅拷贝 (数组也是一样)
深拷贝:
var c = {}; //不要写 var c; 会报错
function extend(a,b){
for(var prop in a){
b[prop]=a[prop];
}
}
extend(a,c);
c.name = "胡歌";
console.log(a.name); //白子画--深拷贝:新建内存,新指针指向新的内存空间 修改其中一个不会影响另外的数据
以下代码可以解决深拷贝
function extend(a, b) { for(var prop in a) { //判断是否是基本数据类型 if(typeof a[prop] === "object") { b[prop] = (a[prop].constructor === Array) ? [] : {};//对象和数组区别处理 extend(a[prop], b[prop]); } else { b[prop] = a[prop]; } } }
转载于:https://www.cnblogs.com/Jane--Blog/p/9141707.html
- 点赞
- 收藏
- 分享
- 文章举报
- 《inside the c++ object model》读书笔记 之五 构造,解构,拷贝语意学
- C++11新特性应用--让你的程序更高效(右值引用避免深拷贝)
- 写时拷贝与引用计数
- C++深拷贝与浅拷贝
- 通过python模块实现服务器和本地机器之间快速拷贝文件
- Map拷贝 关于对象深拷贝 浅拷贝的问题
- C++深拷贝与浅拷贝
- Erlang 学习(二) 文件夹拷贝
- C#File类常用的文件操作方法(创建、移动、删除、复制等) File类,是一个静态类,主要是来提供一些函数库用的。静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和
- iOS开发中表视图搜索栏实现中的Objective-C 深浅拷贝问题
- Java基础-FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream实现文件拷贝
- Jetson TX1/TX2配置教程--拷贝离线安装包
- 标准IO实现文件拷贝实例二
- C# 拷贝文件夹到指定目录
- js 拷贝
- 通过find命令寻找文件并拷贝到一个指定目录方法详解
- PowerShell 拷贝某段时间内的文件
- 主机不能拷贝东西到虚拟机上 解决
- 【javascript基础】之深度克隆(深度拷贝)一个对象
- 2.* 拷贝与传参