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

时间:2017-01-10 11:26:32

标签: javascript splice

我不确定这是一个错误,还是我对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的另一个晚上?

1 个答案:

答案 0 :(得分:5)

您有一个数组和两个变量,其值是对该数组的引用。当您修改其中一个变量的值时,您可以修改另一个变量的值。

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

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