浅拷贝
拷贝的是对象的索引地址,一个对象的数据发生变化时,另一个对象的数据也会发生改变
浅拷贝的方法:
1.对象时多层的情况下
a: Object.assign({},obj)//返回合并后的对象
b: $.extend({},obj)//返回合并后的对象
c: function copy(obj){
var newObj = {};
for(var key in obj){
newObj[key] = obj[key];
}
return newObj;
}
-------------------------------
d:
let a = {
age: 1
}
let b = a//不常用
a.age = 2
console.log(b.age) // 2
深拷贝
拷贝的是对象的值,一个对象的数据发生变化时,另一个对象的数据不会发生改变
深拷贝的方法:
1.对象时单层的情况下:
Object.assign({},obj)
扩展运算符...//注意:当对象是单层时,是深拷贝,当对象是多层时,第一层是深拷贝,第二层就是浅拷贝
var newObj = {...obj}
2.对象是单层或者多层的情况下
$.extend(true,{},obj)
JSON.parse(JSON.stringify(obj))//将对象先转为字符串,在转为对象
注意:
let a = { age: 1 } let b = {...a} a.age = 2 console.log(b.age) // 1 --------------------------------------------- let a = { age: undefined, jobs: function() {}, name: 'yck' } let b = JSON.parse(JSON.stringify(a)) console.log(b) // { name: 'yck'}