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

Javascript中的深拷贝和浅拷贝

时间:2015-11-14 15:05:07      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

var obj = { a:1, arr: [1,2] };
var obj1 = obj;            //浅复制
var obj2 = deepCopy(obj);  //深复制

  javascript中创建对象都是存地址的,而浅拷贝的结果就是obj和obj1都指向了同一个地址,此时如果对其中obj或obj1中的任一一个元素做修改都会影响到另外一个

obj.a = 2;
console.log(obj1.a); //2

  而深拷贝是将对象中的所有属性一个个拷出来在另外一个区域开辟一个空间存储这些属性

var myObj = {
	str: "myString",
	num : 1,
	myArr: [{
		arrgo : "I Am go"
	}],
	obj: {
		innerobj : {
			test : 25
		},
		innerstr: "myobjstring"
	}
}

//深拷贝
function deepCopy(obj) {
	var ret, k, b;
	ret = (obj instanceof Array) ? [] : {};

	for(k in obj) { 
		if((obj[k] instanceof Array) || (obj[k] instanceof Object)) {
        //利用递归逐个复制obj中的属性
			ret[k] = clone(obj[k]);
		} else {
			ret[k] = obj[k];
		}
	}
	return ret;
}

  

Javascript中的深拷贝和浅拷贝

标签:

原文地址:http://www.cnblogs.com/elexiang/p/4964275.html

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