-1
爲什麼這個轉移新變量也轉變原來的老一個
var prodataTemp = [];
prodataTemp = prodata;
prodataTemp.shift();
兩個變量prodatTemp和prodata移位?我可以在控制檯中看到它。
爲什麼這個轉移新變量也轉變原來的老一個
var prodataTemp = [];
prodataTemp = prodata;
prodataTemp.shift();
兩個變量prodatTemp和prodata移位?我可以在控制檯中看到它。
將JavaScript對象分配給另一個變量不會複製內容,但會使左側變量,對右側表達式的引用。所以,
var prodataTemp = [];
製成prodataTemp
指一個空數組,然後
prodataTemp = prodata;
使得prodataTemp
指相同的數組對象prodata
指着。 (所以,舊的空陣列不再被prodataTemp
引用)。
實際上使副本**,用Array.prototype.slice
,這樣
prodataTemp = prodata.slice();
現在,prodataTemp
指的是陣列prodata
的副本,從而使換檔一個不會影響其他。
** - 製作副本只是一個淺拷貝。所以,如果你有一個數組數組,那麼將創建一個新數組,其中包含所有對舊數組元素的引用。因此,變異一個數組元素也會對其他數組元素產生影響。
可能的重複[JavaScript是傳遞引用還是傳值語言?](http://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or -pass按值的語言) – 2014-10-19 10:31:31