2016-01-31 49 views
0
var a = [1, 2, 3]; 
var b = a;  // b = [1, 2, 3]; 

console.log(a); // 1, 2, 3 
console.log(b); // 1, 2, 3 

b.splice(0, 1); 
console.log(b); // 2, 3 
console.log(a); // 2, 3 <----------- WHY? 

我只需要複製我的oryginal「a」數組,因爲我想永遠保持它[1,2,3]。如何從「b」數組中彈出第一個元素而不觸及oryginal元素?由於.splice() - 如何保護oryginal數組?

+1

'var b = a;'不是副本......它們共享相同的數組引用 – charlietfl

回答

1

你的代碼,只需要一個小的修復:

var a = [1, 2, 3]; 
var b = a.slice(); 

我不知道具體的,但是當你指定數組或對象到另一個變量,數組/對象不被複制值而是通過參考。 .slice方法將數組中的所有元素複製到新元素中,而不僅僅保存對舊元素的引用。