javascript中的变量杂耍
为什么在c[2]=b[0]的情况下,a[2]的值也会改变 据我所知,javascript中的变量杂耍,javascript,variables,Javascript,Variables,为什么在c[2]=b[0]的情况下,a[2]的值也会改变 据我所知,var c=a应该只将a[]中的任何值赋给c[],而不是相反 JavaScript中的基本规则是:原语类型由值操作,引用类型(顾名思义)由引用操作 数字和布尔值是JavaScript中的基本类型——基本类型,因为它们只包含少量固定的字节,这些字节在JavaScript解释器的低级(基本)级别上非常容易操作 另一方面,对象和数组是引用类型。这些数据类型可以包含任意数量的属性或元素,因此可以具有任意大小,并且不能如此轻松地进行操作
var c=a
应该只将a[]
中的任何值赋给c[]
,而不是相反
JavaScript中的基本规则是:原语类型由值操作,引用类型(顾名思义)由引用操作
数字和布尔值是JavaScript中的基本类型——基本类型,因为它们只包含少量固定的字节,这些字节在JavaScript解释器的低级(基本)级别上非常容易操作
另一方面,对象和数组是引用类型。这些数据类型可以包含任意数量的属性或元素,因此可以具有任意大小,并且不能如此轻松地进行操作
由于对象和数组值可能会变得相当大,因此按值操作这些类型是没有意义的,这可能会涉及大量内存的低效复制和比较
欲了解更多信息:-变量
c
和a
指向内存中的相同值,因此c
上的每次更改都将修改a
。这是可变性。正如@Ele所说。因此,您需要创建一个新的值实例,例如es6。c=[…a]尝试使用:c=a.slice(0)
这允许您深度复制数组,因此在修改c时不会修改a。@connexo副本仍然有用,因为最终引用可能过于笼统,而中间副本为将一般答案转换为特定答案提供了有价值的上下文。
var a = [1,2,3]
var b = [4,5,6]
var c = a;