转成 JSON 字符串再转回来
var obj = { body: { a: 10 } };
var new_obj = JSON.parse(JSON.stringify(obj));
这种方法能正确处理的对象只有 Number, String, Boolean, Array, 扁平对象,即那些能够被 json 直接表示的数据结构,像function属性会丢失;
自定义递归函数拷贝
function deepClone(initalObj, finalObj) {
var obj = finalObj || {};
for (var k in initalObj) {
if(initalObj.hasOwnProperty(k)){ //只拷贝实例属性,不进行原型的拷贝
if(typeof initalObj[k] == 'object') { //引用类型的数据单独处理
finalObj[k] = Array.isArray(initalObj[k]) ? [] : {};
deepClone(initalObj[k], finalObj[k]); //递归处理引用类型数据
}else{
finalObj[k] = initalObj[k]; //值类型的数据直接进行拷贝
}
}
}
return obj;
}
var str = {};
var obj = { a: {a: "hello", b: 21} };
deepClone(obj, str);
console.log(str.a);