Javascript JS-当我更改数组';a';,设置为数组';b';'的值;b';也改变

Javascript JS-当我更改数组';a';,设置为数组';b';'的值;b';也改变,javascript,arrays,Javascript,Arrays,当我将数组“a”的值更改为数组“b”的值时,“b”的值也会更改。 我不知道为什么 const a = [ ["PENNY", 0.01], ["NICKEL", 0.05], ["DIME", 0.1], ["QUARTER", 0.25], ["ONE", 1], ["FIVE", 5], ["TEN", 10], ["TWENTY", 20], ["ONE HUNDRED", 100] ]; var b =

当我将数组“a”的值更改为数组“b”的值时,“b”的值也会更改。 我不知道为什么

 const a = [
    ["PENNY", 0.01],
    ["NICKEL", 0.05],
    ["DIME", 0.1],
    ["QUARTER", 0.25],
    ["ONE", 1],
    ["FIVE", 5],
    ["TEN", 10],
    ["TWENTY", 20],
    ["ONE HUNDRED", 100]
  ];

  var b = [];


  b.unshift(a[3]);
  //The value of a[3][1] changes to the value of b[0][1]!!!
  b[0][1] += a[3][1];


这是因为当您编写类似“
array1=array2
”的内容时,保存的不是数组的值,而是引用。您必须使用“
[…array]
”来复制值,而不是引用

const a=[
[“便士”,0.01],
[“镍”,0.05],
[“一角”,0.1],
[“季度”,0.25],
[“一”,1],
[“五”,5],
[“十”,10],
[“二十”,20],
[“一百”,一百]
];
var b=[];
b、 取消移位([…a[3]]);
b[0][1]+=a[3][1];
控制台日志(b)

log(a)
您没有复制数组,而是引用了它

与其他变量不同,当将另一个变量设置为数组(或对象)时,将引用原始数组,而不是复制


x
y
引用相同的底层数组


复制数组的一种快速方法是调用不带参数的
slice
方法(切片整个数组)


如图所示,还有其他复制阵列的方法

通常,可以执行浅复制或深复制。上面是浅层复制,只将原始数组中的每个元素传输到复制数组。如果数组中的元素是其他对象(如嵌套数组),那么在编辑它们时可能会遇到同样的问题(因为它们仍然是对原始对象的引用,而不是副本)-在这里,您需要进行深度复制。

这是因为数组是javascript格式的

您有一些基本类型,如数字、字符串或布尔值。然后就有了数组或对象之类的引用类型

从中,您可以很好地解释什么是javascript中的引用类型:

分配了非原语值的变量将引用该值。该引用指向对象在内存中的位置。这些变量实际上并不包含该值

对于数组,您可以简单地复制“作为值”,如:

const-original=[1,2,3,4];
常量克隆=[…原始];
克隆[0]=20;

console.log(克隆)谢谢您的解释。@user3272507我添加了一些您可能想知道的关于spread操作符只进行浅层克隆的更多信息。对于
var a=[[0,1]、[0,2]]
var b=[…a]
,您也会遇到同样的问题。
var x = 2
var y = x; // x is COPIED
y += 1;
console.log(x); // x = 2
console.log(y); // y = 3
var x = [2]
var y = x; // x is REFERENCED
y[0] += 1;
console.log(x); // x = [3] - not x = [2]
console.log(y); // y = [3]
var x = [2]
var y = x.slice(); // x is COPIED
y[0] += 1;
console.log(x); // x = [2]
console.log(y); // y = [3]