Javascript JS-当我更改数组';a';,设置为数组';b';'的值;b';也改变
当我将数组“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 =
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]