Javascript 为什么。。。of循环不会更改数组内的值,而常规的for循环会更改吗?

Javascript 为什么。。。of循环不会更改数组内的值,而常规的for循环会更改吗?,javascript,for-loop,iteration,Javascript,For Loop,Iteration,考虑以下代码 常量=[10,20,30]; 关于iterable的let值{ 数值+=1; console.logvalue; } // 11 // 21 // 31 console.log'after for…of',iterable;//[10,20,30]-没有变化 常数iterable1=[10,20,30]; 对于let i=0;i

考虑以下代码

常量=[10,20,30]; 关于iterable的let值{ 数值+=1; console.logvalue; } // 11 // 21 // 31 console.log'after for…of',iterable;//[10,20,30]-没有变化 常数iterable1=[10,20,30]; 对于let i=0;i
value += 1;

iterable1[i] += 1;
数值+=1;语句确实起作用,并且在该值之后,确实将包含一个大于数组元素的数字1。但是,数组本身的元素保持不变

考虑这个更简单的情况:

let x = 0, y;

y = x;
y += 1;
console.log(x);

您将看到x的值没有变化。变量y也是x值的一个副本,因此当y发生变化时,x不受影响。

在第一种情况下,您只是访问该值,但在增量之后,您不会将其设置回数组。由于数组索引在用于…时不可用,您可以使用

常量=[10,20,30]; 对于iterable.entries的const[i,v]{ 可数[i]=v+1 }
console.log'after for…of',iterable 将for…of循环视为类似于函数可能会有所帮助

请记住,在函数中,当您传入一个作为基元数据类型的参数时,该参数的参数将收到该参数基元值的“副本”。对参数所做的任何更改都不会影响外部变量|参数

并且,当您传入一个作为对象的参数时,该参数的参数将获取该对象内存中地址的副本,例如,它将引用同一对象。对参数所做的任何更改都将影响外部变量|参数

下面的代码片段演示了这两个想法:

原始变量=1; obj={num:1}; 函数原语,对象{ 本原+=1; object.num+=1; console.logprimitive; console.logobject } fprimitiveVariable,obj; console.logprimitiveVariable;
console.logobj;它只是一个副本,因为数组正在存储原语,对吗?如果它是对象,那么value将是一个引用,因此在这种情况下修改value将影响原始数组。@Shnick好吧,描述这种情况的词会变得棘手。变量仍然是对象引用的实际值的副本,因此,无论使用值还是数组元素访问对象,修改对象本身都会反映出来。但严格来说,它仍然是值的副本。只是你不能用对象引用做一些有趣的事情,比如给一个数字加上一个。另请参见:你可以把for…想象成一个普通的for循环,让value=array[index]。当您在分配数组[索引]后更改值时,数组中的值不会更改。