jquery的浅拷贝与深拷贝
$.extend([deep], target, object1, [objectN])
- deep: 如果设为true 为深拷贝, 默认为false 浅拷贝
- target: 要拷贝的目标对象
- object1:待拷贝到第一个对象的对象。
- objectN:待拷贝到第N个对象的对象。
浅拷贝
拷贝对象与被拷贝对象属性名不冲突会合并,
<script>
var target={
name:"yang",
age:18,
msg:{
sex:1
}
}
var targetnew={
old:"no"
};
$.extend(targetnew,target);
console.log(targetnew);
</script>
输出:
浅拷贝的特性: 浅拷贝是把被拷贝的对象复杂数据类型中的地址拷贝给目标对象,修改目标对象会影响被拷贝对象
我们改一下上面的代码:
<script>
var target={
name:"yang",
age:18,
msg:{
sex:1
}
}
var targetnew={
old:"no"
};
$.extend(targetnew,target);
console.log(targetnew);
target.msg.sex=2;
console.log(targetnew);
console.log(target);
</script>
输出:
我们可以看出全部sex全部改成了2:
并且如果要拷贝的对象有与拷贝对象重名的属性,会被覆盖:
var target={
name:"yang",
age:18,
msg:{
sex:1
}
}
var targetnew={
age:11
};
$.extend(targetnew,target);
console.log(targetnew);
输出
深拷贝
1,并且如果要拷贝的对象有与拷贝对象重名的属性,会被覆盖(和浅拷贝一样):
2,完全克隆(拷贝的对象,而不是地址),修改目标对象不会影响被拷贝对象
3,拷贝对象与被拷贝对象属性名不冲突会合并.