Js数据类型
基本数据类型(值类型): Number、String、Boolean、Undefined、Null、Symbol(es6新增独一无二的值) 和 BigInt(es10新增);
引用数据类型: Object。包含Object、Array、 function、Date、RegExp。
深拷贝
只有当拷贝引用数据类型时,拷贝才存在浅拷贝与深拷贝之分
1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用
2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的“值”(数组的所有元素)拷贝过来,是“值”而不是“引用”
为什么要使用深拷贝?
当我们在改变新的数组(对象)的时候,不改变原数组(对象)
浅拷贝(只拷贝第一级数组元素)
数组
浅拷贝就是指创建一个新对象,该对象拥有原始对象第一层属性的精确拷贝。即:如果原始对象的属性是基本类型数据,则拷贝的就是基本数据类型的值;如果原始对象的属性是引用类型,则拷贝的是内存地址。当原始对象的引用类型属性发生改变时,拷贝对象的对应属性值也会发生变化。这里需要强调一下,浅拷贝与赋值是有所区别的,赋值时与原数据指向同一对象,而浅拷贝则指向了不同对象。
1. 直接遍历
var arr = [1, 2, 3, 4];
function copy (arr) {
let newArray = []
for(let item of arr) {
newArray.push(item);
}
return newArray;
}
var copyArray = copy(arr);
copyArray[0] = 100;
console.log(arr); // [1, 2, 3, 4]
console.log(copyArray); // [100, 2, 3, 4]
2. slice()数组方法
当slice()不带任何参数的时候,默认返回一个长度和原数组相同的新数组
var array