【发布时间】:2020-05-21 20:52:13
【问题描述】:
我目前正在学习 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?
【问题讨论】:
-
尝试相同的方法 - 你怎么知道
array1.length = 0;!==array3 = []。此外,似乎 array3 会分配新值,而 array4 会在内存中保留对 [1,2,3] 的引用 -
它可能是一个引用类型,但就像一个对象一样,这意味着你需要改变这个对象。用其他对象覆盖
array3引用不会对现有数组对象做任何事情。 -
您误解了引用类型。当您说
array2 = array1时,您并不是在创建对array1 的引用,而是在创建对数组的引用array1 也是对 的引用。然后,当您说array3 = []时,您将该引用指向一个新数组,但 array4 仍指向原始数组。 -
@Ivar 好电话,已添加
-
如果 1 你正在改变 1 和 2 都指向的数组。如果 2 你说 3 现在指向一个新数组而不触及 4 指向的那个数组。完成。
标签: javascript arrays