JavaScript中数组展开赋值与直接赋值的区别是什么?
数组赋值:展开语法 vs 直接赋值的区别
这两种赋值方式完全不同,核心差异在于是否创建新数组:
直接赋值(Line B:
const arr2 = arr1;)
这里并没有生成新数组,arr2只是拿到了arr1指向的数组的内存引用。也就是说,arr1和arr2其实指向同一个数组对象。后续不管修改哪一个变量对应的数组,另一个都会同步变化:const arr1 = [1,2,3,4,5]; const arr2 = arr1; arr1.push(6); console.log(arr2); // 输出 [1,2,3,4,5,6]展开语法赋值(Line A:
const arr2 = [...arr1];)
这行代码会创建一个全新的数组,并把arr1中的所有元素逐个复制到新数组里。arr1和arr2是两个独立的数组对象,修改其中一个不会影响另一个:const arr1 = [1,2,3,4,5]; const arr2 = [...arr1]; arr1.push(6); console.log(arr2); // 输出 [1,2,3,4,5]
注意:展开语法做的是浅拷贝,如果原数组里包含引用类型(比如对象、嵌套数组),那么嵌套的引用依然会共享,修改嵌套内容时两个数组都会受影响,但对于原问题中的基本类型数组,二者就是完全独立的。
内容的提问来源于stack exchange,提问作者Srajal Dwivedi
相关产品推荐
相关产品推荐

