定义:

浅克隆: 克隆对象的一层属性, 如果对象还有对象的话,里面的对象没有进行克隆,只是把地址给了别人。也可以理解为只是简单的克隆了躯体,但是没有得到其灵魂;

深克隆:克隆对象的多层属性,对象里面还有对象的话,还会继续拷贝;例如:JSON.parse(JSON.stringfy());

还有一种是直接赋值,比浅克隆还要糟糕;躯体都没有复制完整;

区别:

区别 基本数据类型 复杂数据类型
深克隆 改变新数据不会影响原数据 改变新数据不会影响原数据
浅克隆 改变新数据不会影响原数据 改变新数据会影响原数据
赋值 改变新数据会影响原数据 改变新数据会影响原数据

深克隆方法:

JSON.parse(JSON.stringfy( ... ));

只能对单层数据有效,若有多层数据嵌套,里面的数据不能被深拷贝;如:let obj = { name:'sss',age:18,other:{name:'sss2'}};

克隆对象的多层属性;

 var dfg = {
house: "洋房",
money: 10000000000000000,
// car: "宝马",
car: {
name: "名爵",
color: "red"
}
}
// 封装以上代码
// 作用:传一个对象,就可以克隆出来一个新对象
function copy(obj){
// 1. 新创建一个对象
var newObj = {};
// 2. 把obj遍历一下,把成员添加给新对象
for(var k in obj){
// console.log(obj[k]); // 对象中的值
// 以下代码的问题:
// 不管obj[k]的值是复杂的还是简单数据类型,都是直接赋值了
// newObj[k] = obj[k];
// 需要进行判断:
// 1. 如果是简单数据类型 ==> 直接赋值
// 2. 如果是复杂数据类型 ==> 先把复杂数据克隆一份呢,把克隆出来的赋值过去
/*if(typeof obj[k] === "object"){
// 复杂数据类型
// var newCar = copy(obj[k]);
// console.log("复杂数据类型", obj[k]);
// console.log(newCar);
// console.log( newCar === obj[k] );
// 把新的对象添加到nnewObj中
newObj[k] = copy(obj[k]);
}else{
// 简单数据类型
newObj[k] = obj[k];
}*/
// 三元简化以上代码
newObj[k] = typeof obj[k] === "object" ? copy(obj[k]) : obj[k];
}
// 3. 返回新对象
return newObj;
}
var dfg2 = copy(dfg);
console.log(dfg2);

最新文章

  1. Jquery设置Cookie
  2. spring简单介绍
  3. TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序
  4. 为什么在我眼里你是一只傻逼——傻逼“常所用”句型之(2)——“当当网的就有XXX人评论,YYY%的推荐”
  5. JSTL,自定义一个标签的功能案例
  6. Application, JDBC, 数据库连接池, Session, 数据库的关系
  7. 《OD大数据实战》HBase整合MapReduce和Hive
  8. 精选37条强大的常用linux shell命令组合
  9. 2013年度Python Git工具
  10. 什么是SysWow64
  11. Linux 0.11下信号量的实现和应用
  12. Python新手学习基础之数据类型——数字类型
  13. QF——OC数组
  14. vim之快速查找功能
  15. python css选择器
  16. Kafka server部署配置优化
  17. SQLite数据类型(学习必备)
  18. 关于PropertyGrid控件的排序问题
  19. 在nginx上部署django项目--------Gunicorn+Django+nginx+mysql
  20. webpack 3.8 使用 extract-text-webpack-plugin 3.0 抽取css失败:You may need an appropriate loader to handle this file type.

热门文章

  1. mybatis 动态SQL 源码解析
  2. Codeforces Round #670 (Div. 2) D. Three Sequences 题解(差分+思维+构造)
  3. C++基础知识篇:C++ 修饰符类型
  4. std::unique_ptr使用incomplete type的报错分析和解决
  5. python办公入门7:xlwt
  6. 音视频入门-18-手动生成一张GIF图片
  7. JZOJ 2020.10.6 【NOIP2017提高A组模拟9.7】简单无向图
  8. SpringBoot系列:六、集成Swagger文档
  9. Linux驱动模块00
  10. springmvc跨域问题