我觉得我错过了一些关于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
非常感谢提前!
答案 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不是副本,而是引用。
答案 2 :(得分:1)
数组赋值不会复制数组。 newArr
和input
都指向同一个对象。