参考原文地址:https://www.cnblogs.com/136asdxxl/p/8645750.html
js数据类型分为基础数据类型和引用数据类型
1. 基础数据类型: undefined、null、string、number、boolean、symbol(es6)
b. 引用数据类型:Object(例如:Object、Array、function、data等)
基础数据类型保存在 栈内存 ,引用数据类型保存在 堆内存 ,原因在于栈内存必须是大小固定的数据,引用数据类型的大小不固定,只能保存在堆内存中,但可以将引用数据类型的地址写在栈内存中供访问
基础数据类型可以直接访问到值,操作的也是具体的值,引用数据类型只能通过保存在栈内存中的地址来操作实际的值
浅拷贝
- 浅拷贝只是拷贝基础数据类型,如果原数据为数组或对象,那么实际上拷贝的只是栈内存中的对象地址,如果原数据修改则会影响复制后的数据
浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存
深拷贝
- 深拷贝能够实现真正意义上的对象和数组的拷贝,深拷贝会创建一个一摸一样的对象,并且不与原对象共享内存
对象的深拷贝
数组的深拷贝(concat() 和slice())