若是再考慮更奇葩更復雜的狀況,例如咱們定義:數組
var obj = [{ "a": { "a1": ["a11", "a12"], "a2": 1 }, "b": 2 }, ["c", { "d": 4, "e": 5 }]];
這是一個由對象、數組雜合成的奇葩數組,雖然咱們平時寫程序基本不可能這麼折騰本身,可是能夠做爲一種特殊狀況來考慮,這樣咱們就能夠結合以前說的方法去拓展拷貝函數:函數
var sourceCopy = source instanceof Array ? [] : {}; for (var item in source) { sourceCopy[item] = typeof source[item] === 'object' ? objDeepCopy(source[item]) : source[item]; } return sourceCopy; } var objCopy = objDeepCopy(obj); objCopy[0].a.a1[1] = "a13"; objCopy[1][1].e = "6"; obj // => [{ "a": { "a1": ["a11", "a12"], "a2": 1 }, "b": 2 }, ["c", { "d": 4, "e": 5 }]] objCopy // => [{ "a": { "a1": ["a11", "a13"], "a2": 1 }, "b": 2 }, ["c", { "d": 4, "e": 6 }]]
這樣它就能夠做爲一個通用函數替咱們進行深拷貝操做了。spa