在处理我的一个项目时,我遇到了以下问题。以下是我所面临的问题的最佳表现。
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
,则arr
和arr2
都指向内存中的同一空间。
这是的预期行为(而不是错误(
JS Primitives(字符串、整数、布尔值(通过值传递(这将产生您要查找的行为(
如果你想了解更多,你可以搜索";传递引用与值Javascript";
编辑:要按值传递数组,您需要制作一个副本。这可能看起来像arr2 = [...arr]
(这只是一个肤浅的副本(,但您确实需要了解传递值和引用之间的区别。