我不确定这是否是错误或是否完全误解了Javascript,但这是发生了什么:

我带一个对象,里面有两个数组,一个代表当前的ID队列,另一个代表总的ID队列(假设情况)

var mainObject = {
    object1:[],
    object2:[]
};


在一个函数中,我们将两个属性数组设置为相同的变量,该变量保存在开始处理队列之前所需的数组。

var randomVar = [1,2,3,4];
mainObject.object1 = randomVar;
mainObject.object2 = randomVar;


现在,我们想利用splice方法从object1删除第一个索引,同时将其保留在对象2上。

mainObject.object1.splice(0,1);


现在,对象的结果如下:

mainObject = {
    object1:[2,3,4],
    object2:[2,3,4]
};


意味着当我们只要求Javascript运行一次时,两个属性都被拼接了。

参见JS Fiddle的实时示例:
https://jsfiddle.net/ypow6y8g/

我有什么想念的吗?还是这又是一整夜与松散的JS在一起?

最佳答案

您有一个数组和两个变量,它们的值是对该数组的引用。当您修改这些变量之一的值时,您将修改另一个变量,因为它们是相同的。

如果要使阵列独立,请克隆一个:

var randomVar = [1,2,3,4];
mainObject.object1 = randomVar;
mainObject.object2 = randomVar.slice(); // slice returns a new array

10-07 14:55