1、区别
浅拷贝:只拷贝了基本数据类型,引用数据类型只复制了引用,没有复制实体。
深拷贝:拷贝所有的层级属性
2、浅拷贝
(1) 直接赋值
拷贝之后,所有层级属性仍然公用了地址,会被影响
var a = [0, 1, [2,3], 4],
b = a;
a[0] = 1;
a[2][0] = 1;
console.log(a); // [1,1,[1,3],4]
console.log(b); // [1,1,[1,3],4]
(2) slice 返回指定元素
第一层的属性确实深拷贝,拥有了独立的内存,但更深的属性却仍然公用了地址
var a = [0, 1, [2,3], 4],
b = a.slice();
a[0] = 1;
a[2][0] = 1;
console.log(a); // [1,1,[1,3],4]
console.log(b); // [0,1,[1,3],4]
(3) contact 连接2个和多个数组
第一层的属性确实深拷贝,拥有了独立的内存,但更深的属性却仍然公用了地址
var a = [0, 1, [2,3], 4],
var b = a.concat(4,5);
a[0] = 1;
a[2][0] = 1;
console.log(a); // [1,1,[1,3],4]
console.log(b); // [0,1,[1,3],4,5]
(4) object.assign 合并多个对象
第一层的属性确实深拷贝,拥有了独立的内存,但更深的属性却仍然公用了地址
var a = [0, 1, [2,3], 4],
b = Object.assign([], a);
a[0] = 1;
a[2][0] = 1;
console.log(a); // [1,1,[1,3],4]
console.log(b); // [0,1,[1,3],4]
(5) 对象扩展运算符 === Object.assign
第一层的属性确实深拷贝,拥有了独立的内存,但更深的属性却仍然公用了地址
var a = [0, 1, [2,3], 4],
b = [...a];
a[0] = 1;
a[2][0] = 1;
console.log(a); // [1,1,[1,3],4]
console.log(b); // [0,1,[1,3],4]
3、深拷贝
(1) JSON方法(只能拷贝简单对象,对象里面包含函数无法拷贝)
JSON.parse(JSON.stringify(obj))
(2) for循环递归实现
(3) jquery可以$.extend(true, {}, obj)
(4)第三方函数lodash的_.cloneDeep

深拷贝&浅拷贝的更多相关文章

  1. c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参

    c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...

  2. python集合增删改查,深拷贝浅拷贝

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

  3. JavaScript之深拷贝&浅拷贝

    深拷贝&浅拷贝,说起来都明白,但是说不出所以然.今天就系统的整理下思绪,一点点的将其分析出所以然 废话不多说 浅拷贝 简单的说就是一个值引用,学生时代接触过编程的人都应该了解过指针,浅拷贝可以 ...

  4. 【opencv】imread 赋值 深拷贝浅拷贝

    import cv2 import copy import os def filter_srcimg(dstimg): ss=3 srcimg=copy.deepcopy(dstimg) #aa=5 ...

  5. Java基础 深拷贝浅拷贝

    Java基础 深拷贝浅拷贝 非基本数据类型 需要new新空间 class Student implements Cloneable{ private int id; private String na ...

  6. 【04】Python 深拷贝浅拷贝 函数 递归 集合

    1 深拷贝浅拷贝 1.1 a==b与a is b的区别 a == b    比较两个对象的内容是否相等(可以是不同内存空间) a is b  比较a与b是否指向同一个内存地址,也就是a与b的id是否相 ...

  7. JS Object Deep Copy & 深拷贝 & 浅拷贝

    JS Object Deep Copy & 深拷贝 & 浅拷贝 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  8. Map拷贝 关于对象深拷贝 浅拷贝的问题

    问题:map拷贝时发现数据会变化. 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后      先看例子:     ...

  9. clone 深拷贝 浅拷贝

    1. 定义:知道一个对象,但不知道类,想要得到该对象相同的一个副本,在修改该对象的属性时,副本属性不修改,clone的是对象的属性 2. 意义:当一个对象里很多属性,想要得到一个相同的对象,还有set ...

  10. Python深复制浅复制or深拷贝浅拷贝

    1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.(比深拷贝更加节省内存)2. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明如下: >& ...

随机推荐

  1. 分享js中 pageY = clientY + document.body.scrollTop 之间的关系

    //这里没有考虑兼容ie模式下 兼容一般主流浏览器 var $1 = document.getElementById('main') $1.onclick = function(e){ console ...

  2. JS实现PC端全兼容复制

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  3. scrapy框架设置代理

    网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解 ...

  4. tac---反转输出文件

    tac命令用于将文件已行为单位的反序输出,即第一行最后显示,最后一行先显示.

  5. HDU 2563 统计问题 (DFS + 打表)

    统计问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. 机器学习完整过程案例分布解析,python代码解析

    所谓学习问题,是指观察由n个样本组成的集合,并依据这些数据来预測未知数据的性质. 学习任务(一个二分类问题): 区分一个普通的互联网检索Query是否具有某个垂直领域的意图.如果如今有一个O2O领域的 ...

  7. 关于TabLayout+ViewPager组合实现多页面滑动

    转载请注明出处:http://blog.csdn.net/ht_android/article/details/46647711 在android提供的design library中新增了一个控件,叫 ...

  8. es6 --- Generator 函数

    第一部分,ES6 中的 Generator 在 ES6 出现之前,基本都是各式各样类似Promise的解决方案来处理异步操作的代码逻辑,但是 ES6 的Generator却给异步操作又提供了新的思路, ...

  9. 42.管道,cmd执行指令写到管道中

    #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <stri ...

  10. AIX查看HBA卡的WWN号

    1,获得AIX主机连接的光纤设备:        # lsdev -Cc adapter -S a | grep fcs         fcs0      Available 09-08 FC Ad ...