在JavaScript中,数组间的赋值通常指的是将一个数组的内容复制到另一个数组中。这里有两种常见的赋值方式:浅拷贝和深拷贝。
浅拷贝只复制数组的顶层元素,如果数组中包含的是基本类型(如数字、字符串、布尔值),则复制的是值;如果数组中包含的是引用类型(如对象、数组),则复制的是引用,即两个数组中的对象或数组仍然指向内存中的同一个实例。
Array.prototype.slice()
方法[...]
Array.from()
方法let arr1 = [1, 2, { a: 3 }];
let arr2 = arr1.slice();
arr2[2].a = 4;
console.log(arr1); // [1, 2, { a: 4 }]
console.log(arr2); // [1, 2, { a: 4 }]
深拷贝会复制数组中的所有元素以及它们包含的对象或数组,创建一个完全独立的新数组。
JSON.parse(JSON.stringify(array))
(不适用于包含函数、undefined、Infinity等特殊值的数组)_.cloneDeep
方法let arr1 = [1, 2, { a: 3 }];
let arr2 = JSON.parse(JSON.stringify(arr1));
arr2[2].a = 4;
console.log(arr1); // [1, 2, { a: 3 }]
console.log(arr2); // [1, 2, { a: 4 }]
JSON.parse(JSON.stringify(array))
进行深拷贝时,需要注意它不能复制函数、undefined
、Infinity
、NaN
、Date
对象、RegExp
对象、Map
、Set
、undefined
、Infinity
、-Infinity
、NaN
和Symbol
等特殊值。了解这些基础概念和实现方式,可以帮助你在不同的场景下选择合适的数组赋值方法,避免不必要的错误和问题。