JavaScript深复制和浅复制
深复制:直接将数据复制给对应的变量
浅复制:将数据的地址复制给对应的变量
深复制与浅复制,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝。
js中基本类型的赋值为深复制,而引用类型的赋值为浅复制。
浅复制:(引用类型的赋值)
var a = [0,1,2];var b = a;console.log(a);//输出0,1,2console.log(b);//输出0,1,2b[0] = 10;console.log(a);//输出10,1,2 因为是浅复制,地址中的值改变console.log(b);//输出10,1,2var a = [0,1,2];b[0] = 11;console.log(a);//输出0,1,2 因为重新var了一个a,重新赋值了地址console.log(b);//输出1,1,2
深复制:(基本类型的赋值)
var a = 10;var b = a;console.log(a);//输出10console.log(b);//输出10a = 20;console.log(a);//输出20console.log(b);//输出10
深复制实现方法:
1.递归
//深复制function clone(target,source) {for (var key in source) {if (source[key] instanceof Object) {target[key] = new source[key].constructorclone(target[key],source[key])}else {target[key] = source[key]}}}var lucy = {name:'lucy',age: 18,favs: ['唱歌' , "跳舞", "打游戏"]}var lily = {}clone(lily,lucy)console.log(lily)//输出和lucy一样的内容
2.JSON实现深复制
//JSON方法var tar = {}var sour = { a: 1, b:2}tar = JSON.parse(JSON.stringify(sour))console.log(tar)//输出sour值
3.第三方库实现深复制lodash
//先在前面标签中引用
<script type="text/javascript" src="https://cdn.bootcss.com/lodash.js/4.17.11/lodash.min.js">
</script>
//之后使用
//lodash方法实现深复制var obj = [{'a':1},{'b':2}]console.dir(_)var deep = _.cloneDeep(obj)console.log(deep)//输出obj内容console.log(deep[0] === obj[0])//输出false
JavaScript深复制和浅复制相关推荐
- php对象当参数传递 php深复制和浅复制
把对象当参数传递给方法,在方法里改过对象后,影响到外面的对象 因为对象是引用传递过去的 class Book {public $name;public function __construct($n ...
- python列表浅复制_Python列表的深复制和浅复制示例详解
一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码: l1 = [5, 4, 3, 2, 1] # 用 ...
- C#中的深复制和浅复制(在C#中克隆对象)
C#中的深复制和浅复制(在C#中克隆对象) 转载于:https://www.cnblogs.com/dalovess/p/7002947.html
- python list 深复制_Python列表的深复制和浅复制示例详解
免费资源网,https://freexyz.cn/ 一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码 ...
- C++学习基础七——深复制与浅复制
C++学习基础七--深复制与浅复制 一.深复制与浅复制基本知识 深复制和浅复制,又称为深拷贝和浅拷贝. 深复制和浅复制的区别如下图1所示: 图1 图1表示的是,定义一个类CDemo,包含int a和c ...
- 深复制VS浅复制(MemberwiseClone方法介绍)
MemberwiseClone方法,属于命名空间System,存在于程序集 mscorlib.dll中.返回值是System.Object.其含义是:创建一个当前object对象的浅表副本. MSDN ...
- Objective-C 深复制和浅复制与NSCopying协议
1.简单复制只能实现浅拷贝:指针赋值,使两个指针指向相同的一块内存空间,操作不安全. 2. Foundation类已经遵守了<NSCopying>和 <NSMutableCopyin ...
- iOS 集合的深复制与浅复制
2019独角兽企业重金招聘Python工程师标准>>> 概念 对象拷贝有两种方式:浅复制和深复制.顾名思义,浅复制,并不拷贝对象本身,仅仅是拷贝指向对象的指针:深复制是直接拷贝整个对 ...
- IOS学习笔记十八(copy、mutableCopy、NSCopying、NSMutableCopy、深复制、浅复制)
1. copy.mutableCopy方法 copy方法返回对象的不可修改的副本 mutableCopy方法返回的对象可修改的副本 1).测试demo int main(int argc, char ...
最新文章
- 【ACM】杭电OJ 2024
- 【C 语言】字符串模型 ( strstr-do…while 模型 )
- 结构体中的自然对界法则
- java date 时分秒_java Date 获得时分秒代码
- poj3233(矩阵快速幂的和)
- memcmp与strcmp区别
- android开发我的新浪微博客户端系列教程
- 【Python基础】with语句
- python学爬虫、还没放出来_Python 爬虫学习没思路?可以看看这篇文章
- 华为NP课程笔记23-VRRP
- 在微软工作有多舒服?
- div可拖拽移动js方法
- 走进小程序【八】微信小程序中使用【Vant组件库】
- python数据分析与可视化【一】python基础实例
- jtable 表头 透明_和田玉的韧性和透明度如何?你了解吗?它们其实是这样的!...
- 服务器做两个VD可以装系统,华为RH2288V5服务器创建多个VD(Virtual Disk)
- 电气成套设备制造企业项目管理难点及解决方案
- php使用redis消息队列swoole,EasySwoole中利用redis实现消息队列
- 网站日志分析工具汇总
- 拍出天价,乔布斯1973年求职申请表曝光