数组和对象一样,是引用数据类型
因为指向同一块栈区域,所以当修改arr2时,arr1数组也会发生变化,上图代码在控制台输出结果为:
解决方法:
数组浅拷贝,可以用concat、slice方法返回一个新数组的特性来实现拷贝
控制台输出结果为:
可以看到,arr1数组不会因arr2数组改变而改变。
对象深拷贝:obj2 = JSON.parse(JSON.stringify(obj1)) 可实现对象深拷贝
浅拷贝方法只适用于数组元素是基本类型,如果数组中有对象或者数组,需要进行深拷贝,下面是深拷贝一个通用方法,实现思路:拷贝的时候判断属性值的类型,如果是对象,继续递归调用深拷贝函数。
控制台输出结果为:
可以看到,arr1修改数组中对象的值,arr2并没有随之改变,问题解决。