Array.prototype方法影响函数中的多个变量?

时间:2016-01-09 03:08:58

标签: javascript prototype

我觉得我错过了一些关于JavaScript的基本知识。任何帮助将不胜感激。

在下面的代码中,我的函数将数组作为参数。它设置一个新变量newArr等于input变量。



input = [1, 2, 3, 4, 1, 3, 4];

function test(input){
	var newArr = input;
  newArr.splice(0,1);
  return input;
};

console.log(test(input));




现在我在新变量上调用splice()方法。我认为这只会影响新变量,而input变量保持不变。

然而,当我返回input变量时,它的拼接方式与newArr相同。

push()方法也是如此。为什么是这样?如何在一个变量而不是另一个变量上调用这些方法?

小提琴here

非常感谢提前!

3 个答案:

答案 0 :(得分:2)

看起来我错过了我需要克隆数组的事实,而不仅仅是将它分配给一个新变量。

似乎有很多方法可以做到这一点,其中一个看起来像这样:

input = [1, 2, 3, 4, 1, 3, 4];

function test(input){
  var newArr = input.slice(0); // clones array
  newArr.splice(0,1);
  return input;
};

console.log(test(input));

答案 1 :(得分:1)

在javascript中,从另一个var接收对象的var不是副本,而是引用。

http://snook.ca/archives/javascript/javascript_pass

答案 2 :(得分:1)

数组赋值不会复制数组。 newArrinput都指向同一个对象。