Javascript 具有相同值的对象属性在不应该(拼接)时经历相同的变化

Javascript object properties with same values experience the same changes when they shouldn't (splice)

我不确定这是一个错误还是我完全误解了 Javascript,但事实是这样的:

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

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

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

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

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

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