js中深拷贝和浅拷贝

对于问题:

var obj1 = {name:'小明'};

var obj2 = obj1;

obj2.name = "小红";

// obj1.name = ?? 

console.log(obj1.name);// 小红

想让obj1的名字不改变的方法。

1.实现方法最简单的方法

var obj1 = {name:'小明'}

var obj2 = JSON.parse(JSON.stringfy(obj1));

优点:简单方便快捷

缺点:会导致obj1里面的function消失。

2.使用递归的方法遍历属性,重新赋值

var cloneObj = function(obj){

var str, newobj = obj.constructor === Array ? [] : {};

if(typeof obj !== 'object'){

return;

} else if(window.JSON){

str = JSON.stringify(obj), //系列化对象

newobj = JSON.parse(str); //还原

} else {

for(var i in obj){

newobj[i] = typeof obj[i] === 'object' ?

cloneObj(obj[i]) : obj[i];

}

}

return newobj;

};

3.使用jquery的$.extend()

jQuery.extend(true,{a:{a:"a"}},{a:{b:"b"}}); // 深拷贝true

你可能感兴趣的:(js中深拷贝和浅拷贝)