zoukankan      html  css  js  c++  java
  • 集千篇理论,终得深拷贝与浅拷贝的初解

    一、栈和堆

     栈(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) 手动实现递归的方式。
  • 相关阅读:
    J2那几个E和Web基础
    PHP开发人员对JAVA的WEB开发入门(初版-基础知识)
    一个处理大数据的后台服务(已废弃)
    一个请求过来都经过了什么
    请一定记得升级java虚拟机
    面向对象之 结构体和类的区别
    Swift 结构体的使用
    iOS 波浪效果的实现
    iOS 常用三方(持续更新)
    Xshell 链接 Could not connect to '192.168.80.129' (port 22): Connection failed
  • 原文地址:https://www.cnblogs.com/gzw-23/p/11816027.html
Copyright © 2011-2022 走看看