JavaScript中的深拷贝和浅拷贝!

浅拷贝

1.浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用.{也就是拷贝的是地址!简而言之就是在新的对象中修改深层次的值也会影响原来的对象!}

  1. // 2.深拷贝拷贝多层,每一-级别的数据都会拷贝.
  2. var obj = {
  3. id: 1,
  4. name: 'andy',
  5. msg: {
  6. age: 23
  7. }
  8. };
  9. var o = {};
  10. // 浅拷贝!
  11. // for (var k in obj) {
  12. // o[k] = obj[k];
  13. // }
  14. // 也是浅拷贝!
  15. // Object.assign( target, ... sources) es6新增方法可以浅拷贝
  16. Object.assign(o, obj);
  17. console.log(o)
  18. console.log(obj)



深拷贝

  1. // 2.深拷贝拷贝多层,每一-级别的数据都会拷贝.
  2. var obj = {
  3. id: 1,
  4. name: 'andy',
  5. msg: {
  6. age: 23
  7. },
  8. singer: ['小时姑娘', '东京塔子', '叶里']
  9. };
  10. var o = {};
  11. // 用递归的方法实现对象的深拷贝!
  12. // 封装函数
  13. function deepCopy(newObj, oldObj) {
  14. for (var k in oldObj) {
  15. // 判断我们的属性值属于 哪种数据类型!
  16. // 1 获取属性值 oldObj[k]
  17. var item = oldObj[k];
  18. // 2 判断这个值是否是数组!
  19. if (item instanceof Array) {
  20. newObj[k] = [];
  21. deepCopy(newObj[k], item)
  22. } else if (item instanceof Object) {
  23. // 3 判断这个值是否是对象!
  24. newObj[k] = {};
  25. deepCopy(newObj[k], item)
  26. } else {
  27. // 4 于属简单数据类型!
  28. newObj[k] = item;
  29. }
  30. }
  31. }
  32. deepCopy(o, obj);
  33. console.log(o)
  34. o.msg.age = 8734823;
  35. console.log(obj)



第二种实现深拷贝的方式 JSON.parse()

第一种用递归的方法实现深拷贝有点麻烦!下面介绍一种简单的!

  1. var nb = {
  2. x: 1,
  3. y: {
  4. z: [false, null, '']
  5. }
  6. };
  7. s = JSON.stringify(nb); // 将对象转换为字符串!
  8. nnb = JSON.parse(s); // nnb 是 nb 的深拷贝!
  9. 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. C# 数组 ArrayList List<T>区别

    System.Collenctions和System.Collenctions.Generic 中提供了很多列表.集合和数组.例如:List<T>集合,数组Int[],String[] . ...

  2. matplotlib学习日记(二)----图表组成练习

    ''' 将前面的知识进行练习 plot,scatter,legend等 ''' import matplotlib.pyplot as plt import numpy as np from matp ...

  3. 【Azure App Service】C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Application

    问题描述 C#下制作的网站,所有网页本地测试运行无误,发布至Azure之后,包含CHART(图表)的网页打开报错,错误消息为 Runtime Error: Server Error in '/' Ap ...

  4. idea中surround with

    idea中的surround with是把选中的代码块装进一些带有{}的语句中,比如if,try,for等等 快捷键是ctrl+alt+t,先选中代码,再按快捷键,如图

  5. Java学习日报7.31

    package bank;import java.util.*;public class Bank { private Scanner sc=new Scanner(System.in); priva ...

  6. Java学习日报7.12

    public class HelloWorld{ public static void main(String[] args) { System.out.println("Hello Wro ...

  7. 【wp】2020XCTF_逆向

    前几天的XCTF最后一场终于打完了,三场比赛下来对逆向部分的大概感觉是从第一场的啥都不会做(一道lua+一道apk)到后来的终于能有参与度,至少后两场的题目都是pc逆向,虽然特殊架构但好歹能做(tcl ...

  8. flume集成kafka(kafka开启kerberos)配置

    根据flume官网:当kafka涉及kerberos认证: 涉及两点配置,如下: 配置一:见下实例中红色部分 配置conf实例: [root@gz237-107 conf]# cat flume_sl ...

  9. maven打包 依赖jar与不依赖jar

    ?xml version="1.0" encoding="UTF-8"?> <assembly xmlns="http://maven.a ...

  10. 小米11和iphone12参数对比哪个好

    小米11:搭载最新一代三星的AMOLED屏幕,120Hz屏幕刷新,iPhone12使用全新一代的视网膜屏,6.1英寸屏幕,支持60Hz屏幕刷新,支持HDR显示,P3广色域小米手机爆降800 优惠力度空 ...