• 集千篇理论,终得深拷贝与浅拷贝的初解


    一、栈和堆

     栈(stack)和堆(heap)
    stack为自动分配的内存空间,它由系统自动释放;而heap则是动态分配的内存,大小也不一定会自动释放

     二、数据类型

    1.基本数据类型:
    undefined、
    null、string、number、boolean、symbo(ES6)
    2.引用数据类型:
    Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)

     三、引用数据和基本数据类型的区别

    区别:引用类型值可添加属性和方法,而基本类型值则不可以
    基本类型 (所有的操作都针对于值) 基本类型的变量是存放在内存(Stack)里的
    基本数据类型的数据大小确定,内存空间大小可以分配 基本数据类型的值是按访问的 var a=20;---console.log(a) 基本类型的值是不可变的 基本类型的比较是它们的的比较 引用类型 引用类型的值是保存在堆内存(Heap)中的对象(Object)
    引用类型的空间大小不一样 引用类型的值是按引用访问的 var obj={name:'赵丽颖'} console.log(obj.name) 引用类型的值是可变的 引用类型的比较是引用的比较
    引用类型是存放在堆内存中的对象,变量其实是保存的在栈内存中的一个指针(保存的是堆内存中的引用地址),这个指针指向堆内存

                               栈内存

    举个栗子:小明和小红都有各自共同的老婆……大概就这么个意思。

                             堆内存

    举个栗子:我和美女共同租一间房,美女下班打扫了房间卫生,那我的房子也就打扫了……(皮一下真的开心)

     四、深拷贝与浅拷贝

    浅拷贝是指创建一个对象,这个对象有着原始对象属性值的一份精确拷贝
    如果属性是基本类型,那么拷贝的就是基本类型的值,如果属性是引用类型,
    那么拷贝的就是内存地址,所以如果其中一个对象修改了某些属性,那么另一个对象就会受到影响。
    深拷贝是指从内存中完整地拷贝一个对象出来,并在堆内存中为其分配一个新的内存区域来存放,并且修改该对象的属性不会影响到原来的对象。

     举个栗子:

    浅拷贝:(1) Object.assign的方式 (2) 通过对象扩展运算符 (3) 通过数组的slice方法 (4) 通过数组的concat方法。

    深拷贝:(
    1) 通过JSON.stringify来序列化对象 (2) 手动实现递归的方式。
  • 相关阅读:
    读入输出优化
    【JSOI2008】星球大战 并查集
    堆STL和重载运算符
    树的直径
    H3C三层交换机(S5500)清除配置信息并进行简单配置
    简单的逻辑学
    Java基础--第十八天
    Java基础--第十七天
    Java基础--第十六天
    Java基础--第十五天
  • 原文地址:https://www.cnblogs.com/gzw-23/p/11816027.html
Copyright © 2020-2023  润新知