为什么我可以清空数组,即使它是引用类型?

11 浏览
0 Comments

为什么我可以清空数组,即使它是引用类型?

这个问题已经有答案了

如何在JavaScript中清空数组?

JavaScript对象的按引用传递

我目前正在学习JS中的数组。

令我困惑的是数组就像对象一样是引用类型。

所以,如果我创建了对同一数组的新引用(变量)并将其清空,无论我是否使用“const”或“let”关键字声明它,它都应该在两个引用处都清空数组。

但是,如果我使用“let”关键字重新分配原始数组,我可以清空原始数组,但属于新引用的数组不会清空吗?

我认为下面的代码更清楚:

const array1 = [1, 2, 3]
const array2 = array1
array1.length = 0;
console.log(array1) //Outputs []
console.log(array2) //Outputs []
//So both arrays are emptied which makes sense as a reference type but...
let array3 = [1, 2, 3]
let array4 = array3
array3 = []
console.log(array3) //Outputs []
console.log(array4) //Outputs [1,2,3]
//what is going on here? I thought all arrays are reference types regardless of using const or let?

admin 更改状态以发布 2023年5月21日
0
0 Comments

你其实没有真正清空原始的数组,而是重新将array3赋值为一个全新的数组。而另一方面,array4仍然指向array3创建时使用的原始数组。

当创建array4时,它并不本质上与array3的值绑定,而是与array3创建时使用的数组绑定。

0