Javascript 为什么将新数组赋给变量会更改其引用而不是值?
我想知道为什么如果我在JS中运行它,它会在我更改其值后创建对数组的新引用:Javascript 为什么将新数组赋给变量会更改其引用而不是值?,javascript,arrays,Javascript,Arrays,我想知道为什么如果我在JS中运行它,它会在我更改其值后创建对数组的新引用: var array = ["1","2","3"]; var copyOfArray = array; console.log(copyOfArray); // ["1", "2", "3"] var secondArray = ["2","3","4"]; array = secondArray; console.log(array); //["2","3","4"] console.lo
var array = ["1","2","3"];
var copyOfArray = array;
console.log(copyOfArray); // ["1", "2", "3"]
var secondArray = ["2","3","4"];
array = secondArray;
console.log(array); //["2","3","4"]
console.log(copyOfArray); //["1", "2", "3"]
为什么对数组的引用没有更新
var array = ["1","2","3"];
及
两者都可以创建全新的阵列
之后
copyOfArray
和array
指的是同一个数组secondArray
指的是不同的数组
当你现在打字的时候
array = secondArray;
然后array
不再引用第一个数组。相反,它指的是第二个数组 — 对于同一数组secondArray
引用copyOfArray
仍然引用第一个数组,因为变量尚未更改。被称为secondArray
的数组引用只传递给array
,而不是copyOfArray
换句话说,在array=secondArray之后
第一个数组和变量array
之间的链接已断开。这两者之间不再有联系,更重要的是,array
和copyOfArray
之间不再有联系
及
两者都可以创建全新的阵列
之后
copyOfArray
和array
指的是同一个数组secondArray
指的是不同的数组
当你现在打字的时候
array = secondArray;
然后array
不再引用第一个数组。相反,它指的是第二个数组 — 对于同一数组secondArray
引用copyOfArray
仍然引用第一个数组,因为变量尚未更改。被称为secondArray
的数组引用只传递给array
,而不是copyOfArray
换句话说,在array=secondArray之后
第一个数组和变量array
之间的链接已断开。这两者之间不再有联系,更重要的是,array
和copyOfArray
之间不再有联系。当您这样做时:
var array = ["1","2","3"];
var copyOfArray = array;
这将创建一个数组并使copyOfArray
指向同一个实例
数组
-->实例acopyOfArray
-->instanceA
创建第二个数组将创建一个新实例,而前两个数组将指向旧实例:
var secondArray = ["2","3","4"];
数组
-->实例acopyOfArray
-->instanceAsecondArray
-->实例b
现在做
数组=第二个数组
将array
指向的引用更新为secondArray
指向的引用,以便
数组
-->实例bcopyOfArray
-->instanceAsecondArray
-->实例b
这是有意义的,因为当您执行以下操作时,您指向的是secondArray
指向的引用,而不是secondArray
本身:
var array = ["1","2","3"];
var copyOfArray = array;
这将创建一个数组并使copyOfArray
指向同一个实例
数组
-->实例acopyOfArray
-->instanceA
创建第二个数组将创建一个新实例,而前两个数组将指向旧实例:
var secondArray = ["2","3","4"];
数组
-->实例acopyOfArray
-->instanceAsecondArray
-->实例b
现在做
数组=第二个数组
将array
指向的引用更新为secondArray
指向的引用,以便
数组
-->实例bcopyOfArray
-->instanceAsecondArray
-->实例b
这很有意义,因为您指向的是
secondArray
指向的参考,而不是secondArray
本身
C语言使用点运算符
访问结构值标识符后面的结构和联合数据成员,但在指向结构的指针之后使用->
运算符访问其成员
Javascript在访问对象属性时采用了
操作符以简化语法,但在将对象存储在变量中并传递给函数时使用指针值。指针的值,无论是内存地址还是javascript引擎使用的某种表的索引,javascript代码都无法访问
文档
Javascript文档通常声明所有参数数据类型都通过值传递给函数。这仅在变量中的对象值是引用的意义上是正确的,并且当传递给函数或在另一个变量中设置时,仅复制对象引用值而不复制对象的数据结构
发布示例
var array = ["1","2","3"];
var copyOfArray = array;
使array和copyOfArray保留对同一数组对象的引用,该对象在内存中的位置只有javascript引擎知道
var secondArray = ["2","3","4"];
array = secondArray;
创建另一个数组对象,并在secondArray和Array中设置对该对象的引用。将新引用存储在数组中
重写已有的数组引用值。但是,存储在copyOfArray中的参考值尚未更改
因此,secondArray
的日志显示[“2”、“3”、“4”]
但会离开
copyOfArray
holding[“1”、“2”、“3”]
设计
C语言使用点运算符
访问结构值标识符后面的结构和联合数据成员,但在指向结构的指针之后使用->
运算符访问其成员
Javascript采用了
操作符,以便在访问时简化语法