1.浅拷贝的定义
浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用。
浅拷贝的应用:
var data=[
{
id:1,
name:'iphone'
},
{
id:2,
name:'car'
}
]
var o = {};
for(var k in data){
o[k]=data[k];
}
console.log(o);
通过浅拷贝,将data里面的数据,拷贝到数组o里面去,但是浅拷贝只可以拷贝一层,如果里面具有深层低的数据结构,必须使用深拷贝。
Object.assign(target,source)
//ES6 新增语法
可以实现浅拷贝
2.深拷贝的定义
深拷贝拷贝多层,每一级别的数据都会拷贝
深拷贝实例:
<script>
var data =
{
id: 1,
name: 'iphone',
msg: {
ram: '16G',
weight: 2
},
color: ['red', 'pink']
}
//制作一个空对象
var o = {};
//封装函数
function DeepCopy(newobj, oldobj) {
for (var k in oldobj) {
//首先获取对象所有的属性值,然后对于属性值的类型进行判定
var item = oldobj[k];
//判定是否是数组
if (item instanceof Array) {
newobj[k] = [];
DeepCopy(newobj[k], item);
} else if (item instanceof Object) {
newobj[k] = {};
DeepCopy(newobj[k], item);
} else {
newobj[k] = item;
}
}
}
DeepCopy(o, data);
console.log(o);
</script>
上面的第一个对象就是对象o,第二个对象就是原来的data对象。可以看出,对象o的ram属性发生了改变,而原对象data属性并没有发生变化。