gpt4 book ai didi

javascript - 如果它是引用类型,为什么我可以清空一个数组?

转载 作者:行者123 更新时间:2023-12-03 16:41:11 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How do I empty an array in JavaScript?

(18 个回答)



Pass-by-reference JavaScript objects

(9 个回答)


2年前关闭。




我目前正在学习 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?

最佳答案

您实际上并没有清空原始数组,而是将 array3 重新评估为一个全新的数组。另一方面,Array4 仍然指向创建 array3 的原始数组。

创建 array4 时,它并不与 array3 的值绑定(bind),而是绑定(bind)到创建 array3 的数组。

关于javascript - 如果它是引用类型,为什么我可以清空一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60084299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com