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对象的浅拷贝和深拷贝代码,具 ...
随机推荐
- windows下使用zookeeper
windows下dos窗口操作:https://blog.csdn.net/a632189007/article/details/78085858
- windows下php配置环境变量
这样重启终端后,通过php -v可查看新使用的php版本信息. 注:在path配置在上方的先生效
- 13 Python之第一类对象闭包和迭代器
def fn(): print("我叫fn") fn() print(fn)## <function fn at 0x0000000001D12E18> f ...
- init container
init container与应用容器在本质上是一样的, 但它们是仅运行一次就结束的任务, 并且必须在成功执行完成后, 系统才能继续执行下一个容器, 可以用在例如应用容器启动前做一些初始化工作,当in ...
- jquery前端问题随记
1.图片名称不变,但要求刷新,web页面不重新加载渲染,在url地址后面加t=时间戳 js脚本 img.src=url+"?t="+Math.random() 如果是jsp页面,要 ...
- 10个不为人知的 Python 冷知识
转载: 1. 省略号也是对象 ...这是省略号,在Python中,一切皆对象.它也不例外. 在 Python 中,它叫做 Ellipsis . 在 Python 3 中你可以直接写…来得到这玩意. 而 ...
- anaconda安装失败
2019.10版本怎么安装都不行换了2018.10安装ok
- [易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates]
[易学易懂系列|rustlang语言|零基础|快速入门|(17)|装箱crates] 实用知识 装箱crates 我们今天来讲讲装箱技术crates. 什么是crates? 英语翻译是: 英 [kre ...
- 第二章 Vue快速入门-- 17 v-for指令的四种使用方式
1.v-for循环普通数组 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- python+openCV实现双目视差图及测距
通过matlab标定得到相机参数放到stereoconfig.py import numpy as np import cv2 #双目相机参数 class stereoCameral(object): ...