gpt4 book ai didi

JavaScript - 通过引用传递时清空数组/对象问题

转载 作者:行者123 更新时间:2023-12-05 00:31:50 25 4
gpt4 key购买 nike

据我了解,数组和对象都是基于内存地址的引用传递,所以如果我创建另一个变量并指向数组/对象,并改变任何值,另一个值也应该改变。
但是,我不太明白它在这里是如何工作的。我指向array1并将array1修改为空,为什么anotherArray的值没有改变?

   var array1 = [1,2,3,4,5,6,7];  // Created array
var anotherArray = array1; // Referenced array1 by another variable
array1 = []; // Empty the array
console.log(anotherArray); // Output [1,2,3,4,5,6,7]
我可以理解下面的示例为什么 anotherArray 变为 [] 为空,因为它是通过引用传递的,但是为什么 anotherArray 仍然为上面输出 [1,2,3,4,5,6,7] ?
   var array1 = [1,2,3,4,5,6,7]; // Created array
var anotherArray = array1; // Referenced array1 by another variable
array1.length = 0; // Empty the array by setting length to 0
console.log(anotherArray); // Output []
谢谢你。

最佳答案

分配给变量永远不会更改该变量以前作为值的对象。
对象——比如数组——只有在你改变它们时才会改变,要么通过调用执行此操作的方法,要么通过设置属性。
这是您的第一个脚本的可视化:var array1 = [1,2,3,4,5,6,7]结果是:

  array1

┌──────┬───┬───┬───┬───┬───┬───┬───┐
│length│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │
├──────┼───┼───┼───┼───┼───┼───┼───┤
│ 7 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │
└──────┴───┴───┴───┴───┴───┴───┴───┘
之后 var anotherArray = array1我们有这个:
  array1

┌──────┬───┬───┬───┬───┬───┬───┬───┐
│length│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │
├──────┼───┼───┼───┼───┼───┼───┼───┤
│ 7 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │
└──────┴───┴───┴───┴───┴───┴───┴───┘

anotherArray
然后 array1 = []将创建一个新数组:所以现在有两个数组。它还使 array1新创建的数组的引用:
  array1

┌──────┐
│length│
├──────┤
│ 0 │
└──────┘

┌──────┬───┬───┬───┬───┬───┬───┬───┐
│length│ 0 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │
├──────┼───┼───┼───┼───┼───┼───┼───┤
│ 7 │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │
└──────┴───┴───┴───┴───┴───┴───┴───┘

anotherArray
在第二个脚本中,分配给 length属性(实际上是一个 setter )将改变数组。没有创建新数组,并且值 1,2,3,4,5,6,7 丢失:
  array1

┌──────┐
│length│
├──────┤
│ 0 │
└──────┘

anotherArray

关于JavaScript - 通过引用传递时清空数组/对象问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70406754/

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