2013-02-17 36 views
0

所以,這個工作並不像我期待它:的Javascript push()方法中引用數組改變值

var x = [1,2,3]; 
var y = x; 
y.push(4); 
console.log(x); 

我想那會登錄[1,2,3],但它日誌[1,2,3,4]!我需要的是有一個函數只爲y添加一個值,而不是x - 我希望能夠處理[1,2,3]數組,並且能夠「回到它」並且取消所做的更改。我希望這是足夠的理智......

+0

其中一個可能會幫助你:http://stackoverflow.com/search?q=[javascript]+copy+array。 – 2013-02-17 19:12:50

+2

數組就像對象一樣是引用類型。它和'var x = {};是一樣的。 var y = x; y.key ='val';的console.log(X);'。 – loganfsmyth 2013-02-17 19:13:37

+0

可能的重複[在javascript中複製數組的值](http://stackoverflow.com/questions/7486085/copying-array-by-value-in-javascript)---與幾乎相同的示例。 – 2013-02-17 19:14:42

回答

3
var x = [1,2,3]; 
var y = x.slice(); 
y.push(4); 
console.log(x); // Outputs 1,2,3 

使用slice是讓最簡單的方式複製一個數組的

請記住,在JavaScript中,xy參考到數組。在此,Javascript的行爲與例如PHP不同。

所以,當你做y.push(4)你正在推入一個元素到x引用相同的數組。