我写了以下 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发出警报。这里,我得到了预期的行为: myNumber和 copyOfMyNumber的值不同。
在 JavaScript 中,数组和数字之间的区别是什么? 数组的改变似乎会改变数组副本的值,而改变数字并不会改变数字副本的值?
我猜,由于某种原因,数组是通过引用引用的,数字是通过值引用的,但是为什么呢?我如何知道对其他对象应该有什么样的行为?