1、利用json
var obj = { name: "test", desc: "origin" } function deepCopy(obj) { var a = JSON.stringify(obj) var newobj = JSON.parse(a) return newobj } var obj2 = obj // 浅拷贝 var obj3 = deepCopy(obj) // 深拷贝 obj.name = "change" console.log(obj2) // { desc: "origin", name: "change" } console.log(obj3) // { desc: "origin", name: "test" } // 该种方法只能拷贝 value无 function 类型的
2、利用Object.assin()
var obj = { name: "test", desc: "origin" } var obj2 = Object.assign(obj) obj.name = "change" console.log(obj2) // { name: "change", desc: "origin" } // 当对象里只有一级属性时可以这么写, 二级的时候就变成浅拷贝了
3、利用递归
var obj = { name: "test", desc: "origin", sendobj: { name: "test2", desc: "origin2" } } function copy(obj) { let newobj = null // 接受拷贝的新对象 if(typeof(obj) == 'object' && typeof(obj) !== null) { // 判断是否是引用类型 newobj = obj instanceof Array? []: {} // 判断是数组还是对象 for(var i in obj) { newobj[i] = copy(obj[i]) // 判断下一级是否还是引用类型 } } else { newobj = obj } return newobj } var obj1 = copy(obj) obj.sendobj.name = "change" console.log(obj1) /* desc: "origin" name: "test" sendobj: { desc: "origin2" name: "test2" } */