"slice"英文是 片 的意思,顧名思義,slice方法是将數組切片,即傳回原數組的一部分
slice()
方法傳回一個新的數組對象,這一對象是一個由 begin 和 end 決定的原數組的淺拷貝(包括 begin,不包括end)。原始數組不會被改變。
var arr = [4,2,7,0,1,6]
arr.slice(1,3) //[2,7]
arr.slice() //[4,2,7,0,1,6]
arr.slice(1) //[2,7,0,1,6]
arr.slice(1,10) //[2,7,0,1,6]
arr.slice(-2) //[1,6]
arr.slice(-3,-1) //[0,1]
文法:
begin 可選
提取起始處的索引(從 0 開始),從該索引開始提取原數組元素。
如果該參數為負數,則表示從原數組中的倒數第幾個元素開始提 取,slice(-2) 表示提取原數組中的倒數第二個元素到最後一個元素(包含最後一個元素)。
如果省略 begin,則 slice 從索引 0 開始。
如果 begin 大于原數組的長度,則會傳回空數組。
end 可選
提取終止處的索引(從 0 開始),在該索引處結束提取原數組元素。slice 會提取原數組中索引從 begin 到 end 的所有元素(包含 begin,但不包含 end)。
slice(1,4) 會提取原數組中從第二個元素開始一直到第四個元素的所有元素 (索引為 1, 2, 3的元素)。
如果該參數為負數, 則它表示在原數組中的倒數第幾個元素結束抽取。 slice(-2,-1) 表示抽取了原數組中的倒數第二個元素到最後一個元素(不包含最後一個元素,也就是隻有倒數第二個元素)。
如果 end 被省略,則 slice 會一直提取到原數組末尾。
如果 end 大于數組的長度,slice 也會一直提取到原數組末尾。
傳回值
一個含有被提取元素的新數組。
注意:
slice()
方法不會改變原數組,
slice()
方法是淺拷貝,如果原數組中包含引用類型,那麼
slice
會拷貝這個對象引用到新的數組裡。兩個對象引用都引用了同一個對象。如果被引用的對象發生改變,則新的和原來的數組中的這個元素也會發生改變
var list = [{ name: "shi", age: 20 },[1, 2, 3], 60]
var arr = list.slice()
list[0].name = "xia"
console.log(arr) //[{ name: "xia", age: 20 },[1, 2, 3], 60]
Array.prototype.slice()
常用之處是用于将實參清單(
arguments
)轉為數組
由于
arguments
是類數組,不是真正的數組,不能調用數組的方法,是以需要使用
Array.prototype.slice.call(arguments)
将其轉換為數組
function demo(){
var arr = Array.prototype.slice.call(arguments)
console.log(arr) //[1,2,3,4]
}
demo(1,2,3,4)