码迷,mamicode.com
首页 > 编程语言 > 详细

javaScript之深拷贝与浅拷贝

时间:2017-08-15 23:09:05      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:修改   define   内存地址   log   也会   array   string   他也   个数   

 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之深拷贝与浅拷贝

标签:修改   define   内存地址   log   也会   array   string   他也   个数   

原文地址:http://www.cnblogs.com/guya/p/7367796.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!