Javascript全面提高
# javascript ES6 全面提高
6. 浅拷贝和深拷贝
- 浅拷贝只拷贝一层,更深层对象级别的只拷贝一层
- 深拷贝拷贝多层,每一级别的数据都会拷贝
- `Object.assign(target,…sources)ES6新增方法可以浅拷贝
浅拷贝
<script>
// 浅拷贝只拷贝一层,更深层对象级别的只拷贝一层
var obj = {
id:1,
name:admin,
smg: {
age:18
}
}
var o = {}
for(let k in obj){
// k是属性名,obj[k]是属性值
o[k] = obj[k];
}
console.log(o);
//浅拷贝语法糖(ES6)新增
Object.assign(o,obj);
</script>
深拷贝
<script>
var obj = {
id:1,
name:admin,
msg:{
age:18
},
color:['pink','red']
};
var o = {}
// 封装函数
function deepCopy(newobj,oldobj){
for(var k in oldobj){
//判断属性值属于简单数据类型还是复杂数据类型
// 1.获取属性值 oldobj[k]
var item = oldobj[k];
// 2.判断这个值是否是数组
if(item instanceof Array){
newobj[k] = [];
deepCopy(newobj[k],item)
}else if(item instanceof Object){
// 判断这个值是否是对象
newobj[k] = {};
deepCopy(newobj[k],item)
}else{
// 4.属于简单数据类型
newobj[k] = item;
}
}
}
deepCopy(o,obj);
</script>