修改数组也会更改从中继承的数组



在处理我的一个项目时,我遇到了以下问题。以下是我所面临的问题的最佳表现。

function get() {
return [0,0];
}
let arr:number[] = get();     // arr=[0,0]
let arr2:number[] = arr;      // arr2=[0,0]
arr2[1] = arr2[1] + 1;        // arr2=[0,1] arr[0,0]
console.log(arr);             // outputs [0,1]

程序输出[0,1],即使我从未接触过变量arr。我认为这是一个错误,如果不是的话,我很高兴知道这个输出背后的根本原因。提前感谢

在Javascript中,对象(数组基本上就是这样(是通过引用传递的(所以如果说arr2 = arr,则arrarr2都指向内存中的同一空间。

这是的预期行为(而不是错误(

JS Primitives(字符串、整数、布尔值(通过值传递(这将产生您要查找的行为(

如果你想了解更多,你可以搜索";传递引用与值Javascript";

编辑:要按值传递数组,您需要制作一个副本。这可能看起来像arr2 = [...arr](这只是一个肤浅的副本(,但您确实需要了解传递值和引用之间的区别。

最新更新