js深克隆与浅克隆
2024-10-19 02:11:40
定义:
浅克隆: 克隆对象的一层属性, 如果对象还有对象的话,里面的对象没有进行克隆,只是把地址给了别人。也可以理解为只是简单的克隆了躯体,但是没有得到其灵魂;
深克隆:克隆对象的多层属性,对象里面还有对象的话,还会继续拷贝;例如: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);
最新文章
- Jquery设置Cookie
- spring简单介绍
- TNS-12541: TNS: 无监听程序 TNS-12560: TNS: 协议适配器错误 TNS-00511: 无监听程序
- 为什么在我眼里你是一只傻逼——傻逼“常所用”句型之(2)——“当当网的就有XXX人评论,YYY%的推荐”
- JSTL,自定义一个标签的功能案例
- Application, JDBC, 数据库连接池, Session, 数据库的关系
- 《OD大数据实战》HBase整合MapReduce和Hive
- 精选37条强大的常用linux shell命令组合
- 2013年度Python Git工具
- 什么是SysWow64
- Linux 0.11下信号量的实现和应用
- Python新手学习基础之数据类型——数字类型
- QF——OC数组
- vim之快速查找功能
- python css选择器
- Kafka server部署配置优化
- SQLite数据类型(学习必备)
- 关于PropertyGrid控件的排序问题
- 在nginx上部署django项目--------Gunicorn+Django+nginx+mysql
- webpack 3.8 使用 extract-text-webpack-plugin 3.0 抽取css失败:You may need an appropriate loader to handle this file type.
热门文章
- mybatis 动态SQL 源码解析
- Codeforces Round #670 (Div. 2) D. Three Sequences 题解(差分+思维+构造)
- C++基础知识篇:C++ 修饰符类型
- std::unique_ptr使用incomplete type的报错分析和解决
- python办公入门7:xlwt
- 音视频入门-18-手动生成一张GIF图片
- JZOJ 2020.10.6 【NOIP2017提高A组模拟9.7】简单无向图
- SpringBoot系列:六、集成Swagger文档
- Linux驱动模块00
- springmvc跨域问题