<script>
var o = {};
var per = {
name: "刘德华",
age: 18,
sex: {
xingbie: "男",
},
};
//浅拷贝:只拷贝复杂数据类型的地址,这个地址依旧指向堆里面的数据值
Object.assign(o, per);
// for (var k in per) {
// o[k] = per[k];
// }
console.log(per.sex.xingbie); //男
o.sex.xingbie = "女";
console.log(per.sex.xingbie); //女
console.log("-----------------------------");
//浅拷贝:每一层的数据都会被拷贝
// 总之,typeof 和 instanceof 都是用来判断变量类型的,区别在于:
// 1、typeof判断所有变量的类型,返回值有number、string、boolean、function、object、undefined。
// 2、typeof对于丰富的对象实例,只能返回object,导致有时候得不到真实的数据类型。
// 3、instanceof用来判断对象,代码形式(obj1 instanceof obj2)(判断obj1是否为obj2的实例),obj2必须为对象,否则会报错。返回的是布尔值。
// 4、instanceof可以对不同的实例对象进行判断,判断方法是根据对象的原型链依次向下查询,如果obj2的原型属性存在于obj1的原型链上,(obj1 instanceof obj2)值为true。
var o1 = {};
var per1 = {
name: "刘德华",
age: 18,
sex: {
xingbie: "男",
},
};
//封装函数
function deeoCopy(newObj, oldObj) {
for (var key in oldObj) {
//判断是不是数组
if (oldObj[key] instanceof Array) {
newObj[key] = [];
deeoCopy(newObj[key], oldObj[key]);
}
//判断是不是对象
if (oldObj[key] instanceof Object) {
newObj[key] = {};
deeoCopy(newObj[key], oldObj[key]);
} else {
//简单数据类型
newObj[key] = oldObj[key];
}
}
}
</script>
725_深浅拷贝
- 本文链接: http://lzkpersonal.com.cn/2023/07/25/725-深浅拷贝/
- 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!