2014-02-17 35 views
0

我有很奇怪的情況:使用Javascript - 陣列連接到另一個

當我這樣做代碼:

var origin_array = [1,2,3]; 
var m = origin_array; 
m.pop(); 

alert(origin_array); 

origin_array值是1,2 eventhough我沒有改變它

但如果我編碼:

var x = 5; 
var y = x; 
y--; 

alert(x); 

x仍然是5,它將不會被連接從第一個例子中可以看到「x」。

所以我的問題是我如何使「m」數組唯一,不改變原點數組?

+0

數組在JavaScript中通過引用傳遞。 'm === origin_array' – elclanrs

回答

2

你需要明確作出(淺)拷貝或克隆的origin_array

var m = origin_array.slice(0); 

這不需要原始值,如字符串和數字。

重要的是要明白,雖然上述方法可以防止您遇到的問題,但如果您處理更復雜的結構,則可能會發生同樣的情況,並且在某些情況下需要「深度克隆」。

0

數組通過引用進行分配。這意味着,當你這樣做:

var origin_array = [1,2,3]; 
var m = origin_array; 

m只是指向完全相同的數組origin_array。只有一個陣列,並且origin_arraym指向它。如果您通過任一變量修改它們,它們都會看到修改,因爲您正在修改它們都指向的一個數組。

在javascript中,對象和數組都是通過引用分配的。分配它們不會複製。如果您想要分配生成副本,則必須明確地創建副本。對於一個數組,這很容易,你可以這樣做:

var origin_array = [1,2,3]; 
var m = origin_array.slice(0); // makes a shallow copy 
m.pop(); 
console.log(origin_array);  // [1,2,3] because origin_array was not changed