"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]
语法:
arr.slice([begin[, end]])
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)