const deepClone = function(v, depth) {
// default
if (typeof depth !== "number") {
depth = 10;
}
// new value;
var o;
// end recursion
if (depth <= 0) {
return (o = v);
}
var type = typeof v;
// simple type
if (type === "undefined" || type === "number") {
return (o = v);
}
// object
if (type !== "object") {
return (o = v);
}
if (v instanceof Date) {
var o = new Date();
o.setTime( v.getTime() );
} else if (v instanceof Array) {
o[i] = deepClone(v[i], depth-1);
} else {
o = {};
for (var prop in v) {
if (v.hasOwnProperty(prop)){
o[prop] = deepClone(v[prop], depth-1);
}
}
}
return o;
}
设计测试用例
var data = {
"code":0,
"data": {"result":false},
"error":{},
"array": [{"date": new Date()}, {"regexp": new RegExp(/^a.*$/)}],
"extra":{
"cost":0.001359726,
"request-id":"5a7320b08f884fd2f69f7ab38c2421ac@2@u"
}
};
var newData = deepClone(data);
console.log(newData);
console.log("modified:");
newData.array[1].regexp = /^b.*$/;
newData.extra.cost = 999999;
console.log(newData);
console.log("original:");
console.log(data);