javascript 中对象的拷贝

时间:2022-07-07 19:57:30

http://blog.csdn.net/i10630226/article/details/52431562

 

在javascript中,对象都是值引用,也就是说,如果你常规的使用 "=" 来获取一个对象并且赋值给新的对象后,当你对这个新对象进行篡改后,原始对象也会随着改变。如下:

var old = {foo : ["a","b","c"]};
var _new = old;
console.log(_new.foo);
// ["a", "b", "c"]
_new.foo.unshift("d"); // 4
console.log(old.foo); // ["d", "a", "b", "c"]

所以想要拷贝一个对象不是件容易的事。

 

方法1 : 递归拷贝

function deepCopy(p, c) {
    
var c = c || {};
    
for (var i in p) {
      
if (typeof p[i] === 'object') {
        c[i]
= (p[i].constructor === Array) ? [] : {};
        deepCopy(p[i], c[i]);
      }
else {
         c[i]
= p[i];
      }
    }
    
return c;
}

 

方法2 :jQuery 中$.extend()

$.extend( true, {}, [object] );