可能的重复:
在javascript中按值复制数组 https://stackoverflow.com/questions/7486085/copying-array-by-value-in-javascript
我有一个关于 javascript 的有趣问题。我复制一个数组变量以仅对副本进行修改,然后拼接副本以删除元素。然而,原始数组变量受到拼接的影响 - 就好像副本是“按引用复制”:
window.onload = function() {
var initial_variable = ['first', 'second', 'third'];
var copy_initial_variable = initial_variable;
copy_initial_variable.splice(0, 1);
alert('initial variable - ' + initial_variable);
};
//output: initial variable - second,third
firstly,这是 javascript 的故意行为还是一个错误?
其次,我如何制作数组的副本并删除副本中但不删除原始元素中的元素?
有一件事让我认为上面的内容可能是一个 JavaScript 错误,那就是这种行为只发生在数组上,而不是整数上。例如:
window.onload = function() {
var initial_variable = 1;
var copy_initial_variable = initial_variable;
copy_initial_variable = 2;
alert('initial variable - ' + initial_variable);
};
//output: initial variable - 1
如果行为一致那么这应该输出2
因为该作业可能是通过引用进行的?
这绝不是一个错误,而是一个非常常见的误解。让我们看看当我说时会发生什么
var a = b;
整数和其他 JavaScript 基元,如浮点数和布尔值,是“按值分配”的。
这意味着无论什么值bhas 将被复制到a。对于计算机来说,这意味着拥有可以存储的部分内存b复制到内存的引用a参考。这就是您所期待的行为。
当数组和其他对象(以及一个的“后代”)new Object()
call) 都是这样使用的,有一个引用副本。这意味着值a现在引用的值b, 记忆b引用不会被复制或修改。因此,在写作时
a = [1,2,3];
b = a;
b and a变得可以互换。他们引用相同的内存地址。要实现您想要做的事情,请使用
var copy_initial_variable = initial_variable.slice(0);
Read JavaScript 是否通过引用传递? https://stackoverflow.com/questions/13104494/does-javascript-pass-by-reference了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)