js系列三:深复制与浅赋值

如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。

此篇文章中也会简单阐述到栈堆,基本数据类型与引用数据类型,因为这些概念能更好的让你理解深拷贝与浅拷贝。

我们来举个浅拷贝例子:

let a=[0,1,2,3,4],
    b=a;
console.log(a===b);
a[0]=1;
console.log(a,b);

js系列三:深复制与浅赋值_第1张图片
js系列三:深复制与浅赋值_第2张图片
嗯?明明b复制了a,为啥修改数组a,数组b也跟着变了,这里我不禁陷入了沉思。
js系列三:深复制与浅赋值_第3张图片
那么这里,就得引入基本数据类型与引用数据类型的概念了。
面试常问,基本数据类型有哪些,number,string,boolean,null,undefined五类。
引用数据类型(Object类)有常规名值对的无序对象{a:1},数组[1,2,3],以及函数等。
而这两类数据存储分别是这样的:
a.基本类型–名值存储在栈内存中,例如let a=1;
1213309-20171124130901890-511917244.jpg

你可能感兴趣的:(深复制与浅复制,javascript入门到进阶,js系列三:深复制与浅复制)