JavaScript中的深拷贝和浅拷贝!【有错误】还未修改!请逛其他园子!
JavaScript中的深拷贝和浅拷贝!
浅拷贝
1.浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用.{也就是拷贝的是地址!简而言之就是在新的对象中修改深层次的值也会影响原来的对象!}
// 2.深拷贝拷贝多层,每一-级别的数据都会拷贝.
var obj = {
id: 1,
name: 'andy',
msg: {
age: 23
}
};
var o = {};
// 浅拷贝!
// for (var k in obj) {
// o[k] = obj[k];
// }
// 也是浅拷贝!
// Object.assign( target, ... sources) es6新增方法可以浅拷贝
Object.assign(o, obj);
console.log(o)
console.log(obj)
深拷贝
// 2.深拷贝拷贝多层,每一-级别的数据都会拷贝.
var obj = {
id: 1,
name: 'andy',
msg: {
age: 23
},
singer: ['小时姑娘', '东京塔子', '叶里']
};
var o = {};
// 用递归的方法实现对象的深拷贝!
// 封装函数
function deepCopy(newObj, oldObj) {
for (var k in oldObj) {
// 判断我们的属性值属于 哪种数据类型!
// 1 获取属性值 oldObj[k]
var item = oldObj[k];
// 2 判断这个值是否是数组!
if (item instanceof Array) {
newObj[k] = [];
deepCopy(newObj[k], item)
} else if (item instanceof Object) {
// 3 判断这个值是否是对象!
newObj[k] = {};
deepCopy(newObj[k], item)
} else {
// 4 于属简单数据类型!
newObj[k] = item;
}
}
}
deepCopy(o, obj);
console.log(o)
o.msg.age = 8734823;
console.log(obj)
第二种实现深拷贝的方式 JSON.parse()
第一种用递归的方法实现深拷贝有点麻烦!下面介绍一种简单的!
var nb = {
x: 1,
y: {
z: [false, null, '']
}
};
s = JSON.stringify(nb); // 将对象转换为字符串!
nnb = JSON.parse(s); // nnb 是 nb 的深拷贝!
console.log(nnb)
JavaScript中的深拷贝和浅拷贝!【有错误】还未修改!请逛其他园子!的更多相关文章
- javascript中的深拷贝与浅拷贝
javascript中的深拷贝与浅拷贝 基础概念 在了解深拷贝与浅拷贝的时候需要先了解一些基础知识 核心知识点之 堆与栈 栈(stack)为自动分配的内存空间,它由系统自动释放: 堆(heap)则是动 ...
- Javascript中的深拷贝和浅拷贝
var obj = { a:1, arr: [1,2] }; var obj1 = obj; //浅复制 var obj2 = deepCopy(obj); //深复制 javascript中创建对象 ...
- 深入剖析javaScript中的深拷贝和浅拷贝
如何区分深拷贝与浅拷贝,简单来说,假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝:我们先看两个简单的案例: //案例1(深拷贝) var a ...
- 理解JavaScript中的深拷贝和浅拷贝
, num2 = num1;console.log(num1) //1console.log(num2) //1num2 = 2; //修改num2console.log(num1) //1conso ...
- 低门槛彻底理解JavaScript中的深拷贝和浅拷贝
作者 | 吴胜斌 来源 | https://www.simbawu.com/article/search/9 在说深拷贝与浅拷贝前,我们先看两个简单的案例: //案例1var num1 = 1, nu ...
- 001 说说Python中的深拷贝和浅拷贝
在Python编程中忽略深拷贝和浅拷贝可能会造成未知的风险. 比如我们打算保存一份原始对象的副本作为上一状态的记录,此后修改原始对象数据时,若是副本对象的数据也发生改变,那么这就是一个严重的错误. 注 ...
- 浅谈Java中的深拷贝和浅拷贝(转载)
浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...
- C语言中的深拷贝和浅拷贝
//C语言中的深拷贝和浅拷贝 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #inc ...
- 浅谈Java中的深拷贝和浅拷贝
转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...
随机推荐
- windows Server 2016安装Sqlserver远程连接的坑
如果要连接远程服务器 首先打开防火墙端口1433 新建入站规则 然后 如果没启用 就启用 然后重启服务就行 如果还是不行 进去属性 修改三处 然后重启服务
- 管理Windows上的路由表
路由器获取目录帮助手册: route /? 修改路由的时候最高以管理员运行cmd程序 默认路由只是临时生效的,只要管理员禁用在启用网卡,默认路由就消失了(重启计算机默认路由也会消失),可以在后面添加一 ...
- [PASECA2019]honey_shop writeup
这是PASECA2019的一道web题 前端是一个蜂蜜商店,你有$1336,可以买蜂蜜和flag.但是flag要$1337,所以我们只能买蜂蜜. 一般这种题目的常规操作就是通过修改你的钱使你能够买到f ...
- ubuntu系统64位dnw
/* dnw2 linux main file. This depends on libusb. * * * * Author: Fox <hulifox008@163.com> * * ...
- [标签] Java学习日报7.28
package minG;import java.util.*;public class MinG { public static void main(String[] args) { // TODO ...
- 关于STM32的CAN的过滤器
关于STM32的CAN的过滤器STM32普通型芯片的CAN有14组过滤器组,互联型有28组过滤器组.一般我们用的都是普通型的,所以在本文中可以说STM32有14组过滤器组.根据配置,每1组过滤器组可以 ...
- 架构设计哲学【三种方式:支持DevOps的原则】
三种方式:支持DevOps的原则 2012年8月22日作者Gene Kim 45条评论 这篇文章是杨波老师分享的一篇文章:这几年对他架构影响最深的一篇文章.主要描述是关于DevOps的,但对系统架构同 ...
- 虚拟机的安装and虚拟机中安装Linux操作系统
安装虚拟机并安装Linux系统,我们首先需要下载: (1)VMware安装包 (2)Linux 镜像iso 文件 下载VM安装包后准备安装虚拟机: 直接点击下一步 接受条款下一步 这里默认是c盘,建议 ...
- 雅虎(ycsb)测试hbase(压测)
一.下载ycsb 0.10包 https://github.com/brianfrankcooper/YCSB/releases/download/0.10.0/ycsb-0.10.0.tar.gz ...
- 有序矩阵中第k小元素
有序矩阵中第k小元素 题目: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素. 看到有序就会想 ...