2014-10-19 69 views
-1

爲什麼這個轉移新變量也轉變原來的老一個

var prodataTemp = []; 
prodataTemp = prodata; 
prodataTemp.shift(); 

兩個變量prodatTemp和prodata移位?我可以在控制檯中看到它。

+0

可能的重複[JavaScript是傳遞引​​用還是傳值語言?](http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or -pass按值的語言) – 2014-10-19 10:31:31

回答

1

將JavaScript對象分配給另一個變量不會複製內容,但會使左側變量,對右側表達式的引用。所以,

var prodataTemp = []; 

製成prodataTemp指一個空數組,然後

prodataTemp = prodata; 

使得prodataTemp指相同的數組對象prodata指着。 (所以,舊的空陣列不再被prodataTemp引用)。

實際上使副本**,用Array.prototype.slice,這樣

prodataTemp = prodata.slice(); 

現在,prodataTemp指的是陣列prodata的副本,從而使換檔一個不會影響其他。


** - 製作副本只是一個淺拷貝。所以,如果你有一個數組數組,那麼將創建一個新數組,其中包含所有對舊數組元素的引用。因此,變異一個數組元素也會對其他數組元素產生影響。