javaScript之深拷贝与浅拷贝
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javaScript之深拷贝与浅拷贝相关的知识,希望对你有一定的参考价值。
js中有两种数据类型:
1. 基本类型 : Number、String、Boolean、Null、Undefined
2. 复杂类型 : Object 、Array
深拷贝和浅拷贝只针对复杂类型的数据,因为基本类型数据的定义都会重新开辟新的内存。
浅拷贝拷贝的是内存地址,只是增加一个指针指向已有的内存,这时多个数据共用一个内存空间;深拷贝是新增了指针并且新开辟了内存空间,新指针指向新的内存。
浅拷贝:
var a={
name:‘WangJing‘,
sex:‘女‘,
age:‘25‘
};
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]; } } }
以上是关于javaScript之深拷贝与浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章