具有相同值的Javascript对象属性在它们不应该(拼接)时经历相同的更改

Mat*_*hew 0 javascript splice

我不确定这是一个错误,还是我对Javascript有一个完全的误解,但这是发生的事情:

我在其中带有一个带有两个数组的对象,一个表示当前的ID队列,另一个表示ID的总队列(假设情况)

var mainObject = {
    object1:[],
    object2:[]
};
Run Code Online (Sandbox Code Playgroud)

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

var randomVar = [1,2,3,4];
mainObject.object1 = randomVar;
mainObject.object2 = randomVar;
Run Code Online (Sandbox Code Playgroud)

现在我们想要使用splice方法从object1中删除第一个索引,同时将它保留在对象2上.

mainObject.object1.splice(0,1);
Run Code Online (Sandbox Code Playgroud)

该对象的结果如下:

mainObject = {
    object1:[2,3,4],
    object2:[2,3,4]
};
Run Code Online (Sandbox Code Playgroud)

这意味着当我们只让Javascript运行一次时,两个属性都被拼接了.

请参阅JS Fiddle的实例:https: //jsfiddle.net/ypow6y8g/

有没有我缺少的东西,或者这只是另一个与松散的JS一起度过的夜晚?

Den*_*ret 5

您有一个数组和两个变量,其值是对该数组的引用.当您修改其中一个变量的值时,您可以修改另一个变量的值,因为它们是相同的.

如果您希望阵列是独立的,请克隆一个:

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