JS中的奇怪array.push

时间:2012-11-26 12:51:03

标签: javascript

我有简单的代码

sites_from_session = 12;
function function_name () {
    var items_to_send = sites_from_session;
    var template_name = jQuery('#new-site-template-name').val();
    console.log(sites_from_session);
    items_to_send.push(template_name);
    console.log(sites_from_session);
}


function_name();
function_name();
function_name();
function_name();
function_name();
function_name();//...

问题是push方法将值推送到两个数组

enter image description here

我哪里错了?

2 个答案:

答案 0 :(得分:1)

数组不能在JavaScript中自我克隆。当你说像

这样的话
arr1 = arr2;

其中arr2都是有效数组,您尚未创建arr2的实际副本。您所做的就是为arr1创建一个指向它的引用指针。所以当你做出像

这样的改变时
arr1[0] = "some value";

你(实质上)说的是与

相同的东西
arr2[0] = "some value";

要正确克隆单独的副本,您需要使用它:

var items_to_send = sites_from_session.slice();

这将返回一个新数组,其中包含原始数组中的所有项目。

答案 1 :(得分:0)

这是一个非常常见的Javascript问题。不会像这样复制数组:

var items_to_send = sites_from_session;

它只是将数组的引用复制到一个新变量。换句话说,items_to_sendsites_from_session是两个指向RAM中相同数组的名称。如果要复制数组(称为深度复制)而不仅仅是另一个指针(浅复制),则需要使用slice()

//create a copy of the array
var items_to_send = sites_from_session.slice(0);

其余代码应该可以正常工作。

此问题可能重复:How do you clone an Array of Objects in Javascript?

您可以在此处了解详情:http://davidwalsh.name/javascript-clone-array