浅克隆 & 深克隆
栈在栈顶做操作,后进的先出,
基本
类型的数据(小)和指针存储在这里, 堆中,存储引用
类型的数据
-
所以,
const
,Object.freeze等不能修改的其实是它的指针
-
浅克隆
的本质就是把引用
类型的的指针指向同一个,基本
类型会新开辟一个新的空间给它储存 -
深克隆是相对于
引用
类型而言,意思就是要新开一个空间给它,而此时还需要考虑这个数据存储的深度
,比如数组中包含的一个对象,这时候就算遍历了数组,而这个数组中的对象还只是浅克隆
而已(像不像一颗树) -
Object.assign, 展开操作符(…)等等都是理论上的浅克隆,既是被克隆的对象指向别处了,克隆他的对象指针还是老的地址,要实现
安全的深克隆
还是用已有的轮子吧
JS一些新的数据结构
name | 特性 | 用处 | 方法 |
---|---|---|---|
Set | 成员唯一,无序,可遍历 | 去重 | add、delete、has |
WeakSet | 成员都是对象,不能遍历 | 可以用来保存DOM节点,不容易造成内存泄漏 | add、delete、has |
Map | 本质上是键值对的集合,类似集合,可以遍历 | 可以跟各种数据格式转换 | |
WeakMap | 只接受对象作为键名(null除外),键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的不能遍历 | get、set、has、delete |