我编写了以下 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 5
alert(copyOfMyNumber); // alerts 4
此代码声明一个变量myArray
并将其设置为数组值。然后它声明了第二个变量copyOfMyArray
并将其设置为myArray
. 它对 和 执行操作copyOfMyArray
,然后向myArray
和发出警报copyOfMyArray
。不知何故,当我对 执行操作时copyOfMyArray
,似乎对 执行了相同的操作myArray
。
然后代码对数字值做同样的事情:它声明一个变量myNumber
并将它设置为一个数字值。然后它声明了第二个变量copyOfMyNumber
并将其设置为myNumber
. 它对 和 执行操作copyOfMyNumber
,然后向myNumber
和发出警报copyOfMyNumber
。在这里,我得到预期的行为:对不同的value观myNumber
和copyOfMyNumber
。
JavaScript 中的数组和数字之间有什么区别,似乎更改数组会更改数组副本的值,而更改数字不会更改数字副本的值?
我猜出于某种原因,数组是通过引用引用的,而数字是通过值引用的,但为什么呢?我如何知道其他对象的预期行为?