为什么在JavaScript中更改Array会影响数组的副本?我编写了以下JavaScript:var myArray = ['a', 'b', 'c'];var copyOfMyArray = myArray;copyOfMyArray.splice(0, 1);alert(myArray); // alerts ['b','c']alert(copyOfMyArray); // alerts ['b','c']var myNumber = 5;var copyOfMyNumber = myNumber;copyOfMyNumber = copyOfMyNumber - 1;alert(myNumber); // alerts 5alert(copyOfMyNumber); // alerts 4这段代码声明了一个变量myArray并将其设置为数组值。然后,它声明了第二个变量。copyOfMyArray并将其设置为myArray..它对copyOfMyArray然后提醒双方myArray和copyOfMyArray..不知怎么的,当我在copyOfMyArray上执行相同的操作。myArray.然后,代码对一个数字值执行相同的操作:它声明一个变量。myNumber并将其设置为一个数字值。然后,它声明了第二个变量。copyOfMyNumber并将其设置为myNumber..它对copyOfMyNumber然后提醒双方myNumber和copyOfMyNumber..在这里,我得到了预期的行为:myNumber和copyOfMyNumber.数组与JavaScript中的数字之间的区别是,数组的更改似乎改变了数组副本的值,而当更改一个数字时并不会改变数字副本的值?我猜想,由于某种原因,数组是通过引用和数值来引用的,但为什么呢?我怎么知道其他对象会发生什么行为呢?
3 回答
三国纷争
TA贡献1804条经验 获得超7个赞
JavaScript中的数组也是对象而变量只保存一个参照系对象,而不是对象本身。因此,这两个变量都有一个引用同对象。
顺便说一下,您与数字示例的比较是不正确的。您将一个新的值分配给copyOfMyNumber
..如果将新值分配给copyOfMyArray
它不会改变myArray
也一样。
var copyOfMyArray = myArray.slice(0);
但是请注意,这只返回浅层复制,即数组中的对象不会被克隆。
茅侃侃
TA贡献1842条经验 获得超21个赞
var copyOfArray = array;
万千封印
TA贡献1891条经验 获得超3个赞
所以这里的每个人都做了很好的解释为什么这是真的-我只是想让你知道多么,怎样我可以很容易地解决这个问题:
thingArray = ['first_thing', 'second_thing', 'third_thing']function removeFirstThingAndPreserveArray(){ var copyOfThingArray = [...thingArray] copyOfThingArray.shift(); return copyOfThingArray;}
这是用.。扩展语法。
编辑:关于为什么来回答你的问题:
数组与JavaScript中的数字之间的区别是,数组的更改似乎改变了数组副本的值,而当更改一个数字时并不会改变数字副本的值?
答案是,在JavaScript中,数组和对象是可变,而字符串、数字和其他原语是不变..当我们做一项任务时,比如:
var myArray = ['a', 'b', 'c']; var copyOfMyArray = myArray;
CopyOfMyArray实际上只是对myArray的引用,而不是实际的副本。
添加回答
举报
0/150
提交
取消