深拷贝:简单来说假设B复制了A,当修改A时,B不发生变化
浅拷贝:简单来说假设B复制了A,当修改A时,B也发生变化
基础数据类型:number,string,boolean,null,undefined,symbol,基本数据类型可以直接访问,他们是按照值进行分配的,存放在栈(stack)内存中的简单数据段,数据大小确定,内存空间大小可以分配。
引用数据类型:对象{a:1},数组[1,2,3],以及函数,存放在堆(heap)内存中的对象,变量实际保存的是一个指针,这个指针指向另一个位置。
实际情况能碰到
let temp1 = { a:1}
temp1 = temp2
temp2.a = 2
console.log(temp1.a)// 这里输出2
也就是temp1 复制了 temp2,temp2的值改变了,temp1也随之改变
以上是一个标准的浅拷贝,有时候我们不想要temp1改变,这个时候就需要深拷贝
实现原理: 用JSON.stringify将对象转成JSON字符串,再用JSON.parse()把字符串解析成对象,一去一来,新的对象产生了,而且对象会开辟新的栈,实现深拷贝。
注意:这种方法虽然可以实现数组或对象深拷贝,但不能处理函数。