javascript : splice(0) 的妙用
阿新 • • 發佈:2018-12-18
今天看前同事的程式碼,有個寫法很有意思: 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]