1

假设我有:

var obj1 = {
    '0': 'a',
    '1': 'b'
    }

var obj2 = obj; // I want to create a new object with obj contents

obj1[2] = 'c' // Now I modify obj without modifying obj2

obj1 = obj2; // so I can restore obj later

但是修改 obj 也会修改 obj2。如何创建独立于它的 obj1 的副本?

4

2 回答 2

4

您需要对对象进行deepCopy

var obj1 = {
    '0': 'a',
    '1': 'b'
};

var obj2 = deepCopy(obj1);

obj1[2] = 'c'

console.log(obj1);
console.log(obj2);

function deepCopy(obj) {
    var newObj = {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = obj[key];
        }
    }
    return newObj;
}​

检查小提琴

于 2012-12-14T22:59:43.457 回答
2

如果您的对象与 JSON 兼容(即,不包含任何函数作为值,也不包含对 DOM 节点的引用等):

var obj2 = JSON.parse(JSON.stringify(obj1));
于 2012-12-14T22:58:13.650 回答