1. 程式人生 > >javascript : splice(0) 的妙用

javascript : splice(0) 的妙用

今天看前同事的程式碼,有個寫法很有意思: splice(0)。

有意思的是,這並不是一個“合法”的寫法。

 

w3school是這樣寫的:

arrayObject.splice(index,howmany,item1,.....,itemX)
引數 描述
index 必需。整數,規定新增/刪除專案的位置,使用負數可從陣列結尾處規定位置。
howmany 必需。要刪除的專案數量。如果設定為 0,則不會刪除專案。
item1, ..., itemX 可選。向陣列新增的新專案。

index和howmany都是必須的,但似乎只寫index也可以...

那麼,到底 splice(0) 會怎麼樣呢?

 

stackoverflow 上有個問題很有意思。

有個人說,我想把陣列A的東西拷貝到陣列B,結果陣列A怎麼就沒了?

var ArrayA = [];
var ArrayB = [];

ArrayA.push(1);
ArrayA.push(2);

ArrayB = ArrayA.splice(0);

alert(ArrayA.length);

沒錯 splice() 會修改原陣列,而 splice(0) 會把原陣列清空。

var a = [1,2,3,4,5]
   ,b = a.splice(0);
//=> a = [], b = [1,2,3,4,5]

那怎麼解答這個人的問題?

很簡單,用 slice() 就可以了。slice() 不會改變原陣列。

var a = [1,2,3,4,5]
   ,b = a.slice();
//=> a = [1,2,3,4,5], b = [1,2,3,4,5]