js对象深拷贝、浅拷贝
浅拷贝1
//浅拷贝1
let obj01 = {
name: 'Lily',
age: '20',
time: ['13', '15'],
person: {
name: 'Henry',
age: '21'
}
};
let obj02 = obj01;
obj02.age = '25'; //会改变obj11的age
obj02.person.age = '25'; //会改变obj11的person.age
obj02.time[1] = '25'; //会改变obj11的time值
console.log(obj01);
浅拷贝2-只复制一层对象的属性,如果对象中的属性值是对象,浅拷贝并不会复制对象属性中的属性
//浅拷贝2-只复制一层对象的属性,如果对象中的属性值是对象,浅拷贝并不会复制对象属性中的属性
let obj11 = {
name: 'Lily',
age: '20',
time: ['13', '15'],
person: {
name: 'Henry',
age: '21'
}
};
let obj12 = {
age: '22'
};
let obj13 = Object.assign({}, obj11, obj12);
obj13.age = '25'; //不会改变obj11的age
obj13.person.age = '25'; //会改变obj11的person.age
obj13.time[1] = '25'; //会改变obj11的time值
浅拷贝3-三点(...)
//浅拷贝1
let obj01 = {
name: 'Lily',
age: '20',
time: ['13', '15'],
person: {
name: 'Henry',
age: '21'
}
};
let obj02 = {...obj01};
obj02.age = '25'; //会改变obj11的age
obj02.person.age = '25'; //会改变obj11的person.age
obj02.time[1] = '25'; //会改变obj11的time值
console.log(obj01);
深拷贝方法1-JSON.parse(JSON.stringify(obj))
//深拷贝方法1-JSON.parse(JSON.stringify(obj))
let obj21 = {
name: 'Lily',
age: '20',
person: {
name: 'Henry',
age: '21'
}
};
let obj22 = JSON.parse(JSON.stringify(obj21));
obj22.person.age = '25'; //不会改变obj31的person.age
console.log(obj21);
深拷贝方法2-迭代递归法for...in
//深拷贝方法2-迭代递归法for...in
let obj31 = {
name: 'Lily',
age: '20',
time: ['13', '15'],
person: {
name: 'Henry',
age: '21'
}
};
function deepObject(obj){ //深拷贝
let cloneObj = {};
for(let key in obj){
let objChild = Object.prototype.toString.call(obj[key]);
cloneObj[key] = (objChild === '[object Array]' || objChild === '[object Object]') ? deepObject(obj[key]) : obj[key];
}
return cloneObj;
}
let obj32 = deepObject(obj31);
obj32.time[0] = '25'; //不会改变obj31的time值
obj32.person.age = '25'; //不会改变obj31的person.age
console.log(obj31);
js对象深拷贝、浅拷贝的更多相关文章
- 一篇文章彻底说清JS的深拷贝/浅拷贝
一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...
- js对象的浅拷贝与深拷贝
浅拷贝和深拷贝都是对于JS中的引用类型而言的,浅拷贝就只是复制对象的引用(堆和栈的关系,原始(基本)类型Undefined,Null,Boolean,Number和String是存入堆,直接引用,ob ...
- js对象深拷贝与浅拷贝
浅拷贝 把a赋值给b,a与b指向相同的内存,修改b值,a也会跟着改变. var a = "aa"; var b = a; b = "bb"; 这个时候a也变成了 ...
- Map拷贝 关于对象深拷贝 浅拷贝的问题
问题:map拷贝时发现数据会变化. 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后 先看例子: ...
- Java对象深拷贝浅拷贝总结
目录 深拷贝 1. 手动new 2. clone方法 3. java自带序列化 4. json序列化 性能测试 深拷贝总结 浅拷贝 1. spring BeanUtils(Apache BeanUti ...
- js对象深拷贝
数组一维深拷贝:slice.concat.Array.from 对象一维深拷贝:Object.assign 一.利用扩展运算符...对数组中嵌套对象进行深拷贝 var arr=[{a:1,b:2},{ ...
- 原生js 对象深拷贝
经常需要copy一个对象,又怕拷贝有问题,那下面这段就很方便啦,不用担心copy只是一个引用了. /** @ values 需要copy的变量 */ function deepClone(values ...
- js 对象深拷贝
/* *p需要拷贝的对象 * */ var deepCopy=function(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] ...
- js对象浅拷贝和深拷贝详解
js对象浅拷贝和深拷贝详解 作者:i10630226 字体:[增加 减小] 类型:转载 时间:2016-09-05我要评论 这篇文章主要为大家详细介绍了JavaScript对象的浅拷贝和深拷贝代码,具 ...
随机推荐
- CentOS7部署Tomcat服务器
1. 软件 存放路径:/usr/local/src apache-tomcat-9.0.22.tar.gz openjdk-12_linux-x64_bin.tar.gz 2.事先配置 启动后关闭防火 ...
- nginx+php设置大文件请求上传(502及504问题处理)
502问题 php-fpm 修改项: request_terminate_timeout 位置: eg: /etc/php5/fpm2/pool.d/www.conf ; The timeout fo ...
- Java APi 之 RMI远程方法调用
一.什么是RPC RPC全称是remote procedure call,即远程过程调用.它是一种协议,用于从远程计算机上请求服务. 例如有两台服务器A和B,A上的应用想要调用B上应用的方法,但是他们 ...
- vue中监听数据变化 watch
今天做项目的时候,子组件中数据(原本固定的数据)需要父组件动态传入,如果一开始初始化用到的数据.但当时还没有获取到,初始化结束就不会更新数据了.只有监听这两个属性,再重新执行初始化. 1.watch是 ...
- RabbitMQ核心技术总结
RabbitMQ和kafka类似,也是一个消息服务.RabbitMQ是轻量级的,易于部署在内部和云端.RabbitMQ支持多种消息协议,可以部署在分布式集群中,能够满足高规模,高可用性要求.Rabbi ...
- thinkphp5.1 中间件是什么,有什么用
中间件是什么?有什么作用? 中间件主要用于拦截或过滤应用的HTTP请求,并进行必要的业务处理.---tp5.1手册 也就是说,降低了系统的耦合:[在http请求阶段,执行中间件的入口执行方法(hand ...
- 8.支撑向量机SVM
1.什么是SVM 下面我们就来介绍一些SVM(Support Vector Machine),首先什么是SVM,它是做什么的?SVM,中文名是支撑向量机,既可以解决分类问题,也可以解决回归问题,我们来 ...
- 修改mysql的binlog的位置
最近项目上装的mysql服务,分配的磁盘空间太小了,导致binlog两天时间就能打满,这里记录下处理方式 mysql的binlog日志是一个很重要的日志,以事件形式记录了所有的DDL和DML(除了数据 ...
- 你所不知的VIM强大功能
1. 可视化区块(Visual Block) (1)cd ~ 切换到自己的家目录(本范例中为root用户) (2)touch test1 test2 建立两个文件做演示(3)last > tes ...
- mysql5.6新功能索引条件下推(转载)
原文地址:http://www.cnblogs.com/zengkefu/p/5684101.html 一什么是"索引条件下推" "索引条件下推",称为 Ind ...