# 深拷贝

# 定义

深拷贝就是来完完整整的拷贝的一个对象,嵌套对象,也会进入继续拷贝。

# JSON.stringify

通用于数组和对象。

var arr = [1, 2, 3];
var newArr = JSON.parse(JSON.stringify(arr));

var arr1 = [{a: 1}, {b: 2}];
var newArr1 = JSON.parse(JSON.stringify(arr1));
var obj = {a: 1, b: 2};
var newObj = JSON.parse(JSON.stringify(obj));

var obj = {a: {b: 2}, c: {d: 4}};
var newObj = JSON.parse(JSON.stringify(obj));

注意: JSON.stringify 有自己的特性(看 JSON.stringify 章节)。

# 实现一个深度拷贝

function deepCopy(obj) {
    if (typeof obj !== 'object' && obj === null) return;
    var newObj = obj instanceof Array ? [] : {};
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
        }
    }
    return newObj;
}