我有一个对象,x.我想把它复制为对象y,这样改变y就不要修改了x.我意识到复制从内置JavaScript对象派生的对象将导致额外的,不需要的属性.这不是问题,因为我正在复制我自己的一个文字构造的对象.
如何正确克隆JavaScript对象?
我写了以下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
Run Code Online (Sandbox Code Playgroud)
此代码声明一个变量myArray并将其设置为数组值.然后它声明第二个变量copyOfMyArray并将其设置为myArray.它执行操作copyOfMyArray,然后警告两者myArray和copyOfMyArray.不知何故,当我执行操作时copyOfMyArray,似乎执行相同的操作myArray.
然后代码使用数字值执行相同的操作:它声明一个变量myNumber并将其设置为数字值.然后它声明第二个变量copyOfMyNumber并将其设置为myNumber.它执行操作copyOfMyNumber,然后警告两者myNumber和copyOfMyNumber.在这里,我得到预期的行为:对不同的价值观myNumber和copyOfMyNumber.
数组和JavaScript中的数字有什么区别,它似乎更改数组会更改数组副本的值,而更改数字不会更改数字副本的值?
我猜测由于某种原因,数组是通过引用引用的,而数字是按值引用的,但为什么呢?我如何知道其他对象的行为?