我不确定这是否是错误或是否完全误解了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