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

标签 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() 也会发生同样的情况方法。为什么是这样?如何对一个变量而不是另一个变量调用这些方法?

fiddle here

非常感谢!

最佳答案

看起来我忽略了一个事实,即我需要克隆数组,而不仅仅是将其分配给新变量。

似乎有很多方法可以做到这一点,其中一种如下所示:

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));

关于javascript - Array.prototype 方法会影响函数中的多个变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689307/

相关文章:

javascript - 我可以为 RaphaelJS 的 Canvas 事件提供点击和键盘处理程序吗?

javascript - 我的 jQuery 插件参数无法正确触发时遇到问题

javascript - 在javascript中使用原型(prototype)

javascript - 我们应该使用 .prototype 而不是当前的实例化方法吗?

javascript - 方法作为原型(prototype)中的属性

javascript:从字符串调用对象中的方法

javascript - 我可以使用原型(prototype)模式而不是闭包模式来创建解析为对象的 promise 吗?

javascript - 如何使用 hasClass 来检测某个类是否不是我想要的类?

javascript - 如何让ngForm知道它嵌套的表单已经提交

javascript - lodash 怎么会有一个驻留在不在存储库中的目录中的构建脚本?