let obj1 = {
name: 'Jay', age: '22' }
let obj2 = obj1;
obj2.name = 'xxx'
console.log(obj1.name, obj2.name)
//输出结果为(xxx xxx)
let obj1 = {
name: 'Jay', age: '22',fun:function() {
console.log(1)} }
let obj2 = {
...obj1 };
obj2.name = 'xxx'
console.log(obj1.name, obj2.name, obj2)
//输出结果为(jay xxx {
name: "xxx", age: "22", fun: ƒ})
一行代码解决问题,支持函数赋值,解决深拷贝问题
let obj1 = {
name: 'Jay', age: '22', fun:function() {
console.log(1)} }
let _obj = JSON.stringify(obj1)
console.log(_obj) //这里的_obj变成了字符串’{
"name":"Jay","age":"22"}‘
let obj2 = JSON.parse(_obj)
obj2.name = 'xxx'
console.log(obj1, obj2)
//({
name: "Jay", age: "22", fun: ƒ} ,{
name: "xxx", age: "22"})
这里很明显,是吧json对象转化为字符串,然后再赋值,赋值完成后再转换为json对象,这个方法虽然简单,但是也有一个问题就是,对象里面的函数方法没有赋值成功。
let obj1 = {
name: 'Jay', age: '22',fun:function() {
console.log(1)} };
let obj2 = $.extend(true,{
},obj1);
不足点是需要引用jQuery库 ,无法拷贝 对象中值为undefined的属性
function deepClone1(obj) {
//判断拷贝的要进行深拷贝的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
var objClone = Array.isArray(obj) ? [] : {
};
//进行深拷贝的不能为空,并且是对象或者是
if (obj && typeof obj === "object") {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone1(obj[key]);
} else {
objClone[key] = obj[key];
}
}
}
}
return objClone;
}