Javascript - 通过引用问题传递变量

时间:2013-12-02 10:04:08

标签: javascript operators pass-by-reference

我正在尝试复制一个javascript数组并修改'copy'而不修改原始变量,任何人都可以解释我做错了什么..

e.g

var array1 = [2, 5];
var array2 = '';

array2 = array1;
array2.pop();
console.log(array1);
console.log(array2);

// both output the same, however I want it to show array1 with 1 single item

我正在努力使array2只包含数组中的一项& array1将在数组中包含两个项目。我有什么想法吗?

5 个答案:

答案 0 :(得分:2)

为了创建数组的副本而不是分配参考值,您可以使用.slice方法。

array2 = array1.slice(0);

Slice将给定数组的(浅)副本从给定索引返回到(可选结束索引)

答案 1 :(得分:1)

使用slice()复制数组。

    var array1 = [2, 5];
    var array2 = '';

    array2 = array1.slice(0);
    array2.pop();
    console.log(array1);
    console.log(array2);
  

slice不会改变原始数组,但会返回一个新的“一级”   深度“复制,包含从中切出的元素的副本   原始阵列。

Documentation

答案 2 :(得分:0)

将行array2 = array1;更改为:

array2 = array1.slice(0);

Slice方法将给定数组的(浅)副本从给定索引返回到(可选结束索引)

我希望这会有所帮助。

答案 3 :(得分:0)

就像使用切片功能一样简单:

var array1 = [2, 5];
var array2 = '';

array2 = array1.slice();
array2.pop();
console.log(array1);
console.log(array2);

在这里,您要告诉javascript获取array1中元素的副本,并将结果分配给array2。通过不设置开始和结束位置,它将切割整个数组。

答案 4 :(得分:0)

撰写本文时

array2 = array1 //It creates reference on array1 object
array2.pop()  // removes 5 from both end

所以你必须通过slice()方法将一个数组克隆到另一个数组---

array2 = array1.slice(0) // cloning array1 's  element  to array2
array2.pop() //  removes 5 from only array2 not from array1

现在可以正常使用