为什么循环将变量值转换为另一个变量,该变量等于循环中只应更改的变量?
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]
forEach 循环给我相同的结果
arrr.forEach(function(e, 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
中,请使用 Array#slice()
let arrr = [1, 1, 1, 1, 1];
let preArrr = arrr.slice();
for (let i = 0; i < arrr.length; i++) arrr[i] = i;
console.log('arrr', JSON.stringify(arrr))
console.log('preArrr', JSON.stringify(preArrr))
关于javascript - 为什么循环保持两个变量相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50594662/