【发布时间】:2011-09-30 12:59:31
【问题描述】:
我编写了以下 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 中数组和数字的区别在于,更改数组似乎会更改数组副本的值,而更改数字不会更改数字副本的值?
我猜出于某种原因,数组是按引用引用的,而数字是按值引用的,但是为什么呢?我如何知道其他对象的预期行为?
【问题讨论】:
标签: javascript