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中的深拷贝和浅拷贝!【有错误】还未修改!请逛其他园子!的更多相关文章

  1. javascript中的深拷贝与浅拷贝

    javascript中的深拷贝与浅拷贝 基础概念 在了解深拷贝与浅拷贝的时候需要先了解一些基础知识 核心知识点之 堆与栈 栈(stack)为自动分配的内存空间,它由系统自动释放: 堆(heap)则是动 ...

  2. Javascript中的深拷贝和浅拷贝

    var obj = { a:1, arr: [1,2] }; var obj1 = obj; //浅复制 var obj2 = deepCopy(obj); //深复制 javascript中创建对象 ...

  3. 深入剖析javaScript中的深拷贝和浅拷贝

    如何区分深拷贝与浅拷贝,简单来说,假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝:我们先看两个简单的案例: //案例1(深拷贝) var a ...

  4. 理解JavaScript中的深拷贝和浅拷贝

    , num2 = num1;console.log(num1) //1console.log(num2) //1num2 = 2; //修改num2console.log(num1) //1conso ...

  5. 低门槛彻底理解JavaScript中的深拷贝和浅拷贝

    作者 | 吴胜斌 来源 | https://www.simbawu.com/article/search/9 在说深拷贝与浅拷贝前,我们先看两个简单的案例: //案例1var num1 = 1, nu ...

  6. 001 说说Python中的深拷贝和浅拷贝

    在Python编程中忽略深拷贝和浅拷贝可能会造成未知的风险. 比如我们打算保存一份原始对象的副本作为上一状态的记录,此后修改原始对象数据时,若是副本对象的数据也发生改变,那么这就是一个严重的错误. 注 ...

  7. 浅谈Java中的深拷贝和浅拷贝(转载)

    浅谈Java中的深拷贝和浅拷贝(转载) 原文链接: http://blog.csdn.net/tounaobun/article/details/8491392 假如说你想复制一个简单变量.很简单: ...

  8. C语言中的深拷贝和浅拷贝

    //C语言中的深拷贝和浅拷贝 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #inc ...

  9. 浅谈Java中的深拷贝和浅拷贝

    转载: 浅谈Java中的深拷贝和浅拷贝 假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(bool ...

随机推荐

  1. windows Server 2016安装Sqlserver远程连接的坑

    如果要连接远程服务器 首先打开防火墙端口1433  新建入站规则 然后 如果没启用 就启用  然后重启服务就行 如果还是不行 进去属性  修改三处 然后重启服务

  2. 管理Windows上的路由表

    路由器获取目录帮助手册: route /? 修改路由的时候最高以管理员运行cmd程序 默认路由只是临时生效的,只要管理员禁用在启用网卡,默认路由就消失了(重启计算机默认路由也会消失),可以在后面添加一 ...

  3. [PASECA2019]honey_shop writeup

    这是PASECA2019的一道web题 前端是一个蜂蜜商店,你有$1336,可以买蜂蜜和flag.但是flag要$1337,所以我们只能买蜂蜜. 一般这种题目的常规操作就是通过修改你的钱使你能够买到f ...

  4. ubuntu系统64位dnw

    /* dnw2 linux main file. This depends on libusb. * * * * Author: Fox <hulifox008@163.com> * * ...

  5. [标签] Java学习日报7.28

    package minG;import java.util.*;public class MinG { public static void main(String[] args) { // TODO ...

  6. 关于STM32的CAN的过滤器

    关于STM32的CAN的过滤器STM32普通型芯片的CAN有14组过滤器组,互联型有28组过滤器组.一般我们用的都是普通型的,所以在本文中可以说STM32有14组过滤器组.根据配置,每1组过滤器组可以 ...

  7. 架构设计哲学【三种方式:支持DevOps的原则】

    三种方式:支持DevOps的原则 2012年8月22日作者Gene Kim 45条评论 这篇文章是杨波老师分享的一篇文章:这几年对他架构影响最深的一篇文章.主要描述是关于DevOps的,但对系统架构同 ...

  8. 虚拟机的安装and虚拟机中安装Linux操作系统

    安装虚拟机并安装Linux系统,我们首先需要下载: (1)VMware安装包 (2)Linux 镜像iso 文件 下载VM安装包后准备安装虚拟机: 直接点击下一步 接受条款下一步 这里默认是c盘,建议 ...

  9. 雅虎(ycsb)测试hbase(压测)

    一.下载ycsb 0.10包 https://github.com/brianfrankcooper/YCSB/releases/download/0.10.0/ycsb-0.10.0.tar.gz ...

  10. 有序矩阵中第k小元素

    有序矩阵中第k小元素 题目: 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素. 请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素. 看到有序就会想 ...