JavaScript中重新分配数组后新变量为何仍指向旧值?
JavaScript引用类型:重新赋值原数组后新变量为何保留原值?
在Udemy学习时了解到,JavaScript中的数组和对象属于引用类型,将已声明的数组赋值给新变量(如arr2)时,复制的是原数组的指针而非值。但当用let声明的原数组被重新分配时,为何新变量arr2输出的是重新分配前的值而非新值?
示例代码1
let arr1 = [0, 1, 2, 3]; let arr2 = arr1; arr1.shift(); console.log(arr2); // [ 1, 2, 3] arr1[0] = 3; console.log(arr2); // [ 3, 2, 3]
示例代码2
为何输出[0, 1, 2, 3]?
let arr = [0, 1, 2, 3] let arr2 = arr arr = [3, 2, 1, 0] console.log(arr2) // [0, 1, 2, 3]
解决方案
arr2指向的是arr最初引用的数组[0, 1, 2, 3]的内存地址;当arr被重新赋值为新数组[3, 2, 1, 0]时,只是arr指向了新数组的内存地址,而arr2仍指向原数组的内存地址,因此输出原数组的值。
内容的提问来源于stack exchange,提问作者최석규
相关产品推荐
相关产品推荐

