IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> javascript 堆栈 和 深浅拷贝 -> 正文阅读

[JavaScript知识库]javascript 堆栈 和 深浅拷贝

堆栈, JavaScript

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

2,数据类型
Js数据类型可以区分为:基本数据类型和引用数据类型
基本数据类型: Number, String, Boolean, Null, Undefined
引用数据类型: Object(在JS中除了基本数据类型以外的都是对象,数据是对象,函数是对象,正则表达式是对象)

基本数据类型储存在栈内存中, 在栈内存中的基本数据段, 数据大小确定,内存控件大小可分配, 是直接按照值来存放的,所以直接按照值来访问

let a = "a的值";
let b = a;
b = "b重新赋的值";
console.log(a); // a的值
console.log(b); /let/ b重新赋的值

引用数据类型存储在堆内存中的对象,变量保存在了栈内存中的一个指针上(这个指针就是在堆内存中地址),通过这个指针可以找到堆内存中的对象

let Obj1 = new Object();
var Obj2 = Obj1;
Obj2.name = "名咋";
console.log(Obj1.name);//"名咋"

运行上面代码可以知道, 虽然Obj1把值赋给了Obj2, 但是赋值的只是一份引用地址, 就是说他们用的是在堆内存中同一个位置的对象, 所以修改会导致同步;
如果我不想让他们引用同一个堆内存对象呢, 这就是所谓的深拷贝,
3,深浅拷贝
简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,如果B没变,那就是深拷贝
比如上面的对象赋值, 赋值了, 但是只给了一个地址. 在堆内存中再开辟一片空间, 把Obj1真正的复制一遍, 这样就是深拷贝
哪些是深拷贝方法哪些是浅拷贝方法?
这就有意思了, 以为有些方法在第一层数据的时候是深拷贝,第两层以及第两层以上的数据就是浅拷贝,哈哈哈
例如: 展开运算符

let a = {ff:{child:"a-ff-child"},ff2:"a-ff2"}
let b = {...a};
b.ff2 = "b-ff2";
b.ff.child = "b-ff-child";
console.log(a)

打印结果:
打印结果
有兴趣可以用展开运算符试试数组, 结果是相似的;

slice(),concat(),Object.assign()方法与上面的类似,第一层的值修改不会导致赋值对象的修改, 对象中还有对象就会收到影响

深拷贝方法:

1,利用JSON.parse 和JSON.stringfy

 let objCopy = JSON.parse(JSON.stringify(obj));

这种深拷贝方法只适用于对象内只包含数组和对象, 如果出现undefined,函数等会出现问题,详情请见https://www.jianshu.com/p/b084dfaad501

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:03:16  更:2022-03-03 16:05:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:28:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码