Javascript 为什么循环保持两个变量相等?

Javascript 为什么循环保持两个变量相等?,javascript,loops,for-loop,foreach,Javascript,Loops,For Loop,Foreach,为什么循环将变量值转换为另一个变量,该变量等于循环只应更改的变量 let arrr = [1,1,1,1,1]; let preArrr = [0,0,0,0,0]; preArrr = arrr; for (let i=0; i < arrr.length; i++) arrr[i] = i; console.log(arrr, preArrr) // arrr = [0,1,2,3,4], preArrr = [0,1,2,3,4] 但如果我立即更改阵列,它将无法连接 let

为什么循环将变量值转换为另一个变量,该变量等于循环只应更改的变量

let arrr = [1,1,1,1,1];
let preArrr = [0,0,0,0,0];
preArrr = arrr;

  for (let i=0; i < arrr.length; i++) arrr[i] = i;

console.log(arrr, preArrr) // arrr = [0,1,2,3,4], preArrr = [0,1,2,3,4]
但如果我立即更改阵列,它将无法连接

let arrr = [1,1,1,1,1];
let preArrr = [0,0,0,0,0];
preArrr = arrr;

  arrr = [0,1,2,3,4]

console.log(arrr, preArrr) // arrr1 = [0,1,2,3,4], preArrr1 = [1,1,1,1,1];
那么,如何避免这种连接,但仍然使用循环呢?我正试图保存数组的上一个状态,因为您将preArr更改为指向和arr相同的数组

当您执行preArr=arr时,它不会复制。相反,这两个变量都是对完全相同数组的引用

如果要将原件复制到preArr中,请使用Arrayslice

设arrr=[1,1,1,1,1]; 让preArrr=arrr.slice; 对于let i=0;iconsole.log'prearr',JSON.stringifyprearr我注意到,如果要复制的数组有两个维度,slice方法不会阻止对同一数组的引用

为了避免这种情况:

function slice2D(arr) {
  let store = [];
  for (let i = 0; i < arr.length; i++) {
    store.push(arr[i].slice());
  }
  return store;
}

let pasteArr = slice2D(copyArr);

您的代码没有意义,什么是arrr1?preArrr=arrr;-prearr的原始内容现在无关紧要了。。。您刚刚将preArrr和arrr设置为同一阵列。。。让preArrr=arrr.slice。。。现在值是相同的,但不是相同的数组注意,如果arrr的内容是对象,那么前面的语句就不太准确了-但是在本例中,您处理的是基元值,即1,而不是objects@mackenzie-克雷格:对不起,应该有course@jaromanda-x我理解,thanx manarrr=[0,1,2,3,4]可能需要注意的是,在上一期中,preArrr首先更改为指向同一位置,但随后arrr更改为指向另一位置。
function slice2D(arr) {
  let store = [];
  for (let i = 0; i < arr.length; i++) {
    store.push(arr[i].slice());
  }
  return store;
}

let pasteArr = slice2D(copyArr);