Array.prototype.slice()
slice() 方法返回一个从开始到结束(不包括结束)的数组的一部分浅拷贝到一个新的数组对象。
原始数组不会发生改变。
语法
arr.slice()
arr.slice(start)
arr.slice(start,end)
参数说明
start
从索引开始位置开始计算起(0开始),如果参数为负数,那么就从原数组的倒数第几个开始提取,比如 arr.slice(-2),那么提取的是从倒数第二个元素到最后一个元素(包括最后一个元素)。
如果省略start
,那么就从0开始提取。
end
在该索引结束元素提取(0开始),slice()会提取从start
到end
的所有元素(包括start,不包括end);
如果省略end
,那么会提取到最后一个元素,如果end
大于数组长度,会提取到最后一个元素。
返回值
返回一个新的数组
描述
slice()不修改原数组,浅拷贝一份元素到一个新的数组。
1.如果该元素是一个对象引用,slice会拷贝这个对象的引用到新的数组中,两个元素同时对一个对象进行了引用,如果改变了被引用的对象,那么两个数组中的对象都会发生改变。
2.对于String、Number、Boolean(不是对象)来说,拷贝到了新数组中,二者不管那个发生了改变,都不会影响另外一个数组。
3.如果向两个数组任意一个添加了一个新元素,另一个不会受影响。
使用技巧
slice方法可以将一个类数组(Array-list)对象/集合转成一个数组,你只需要将该方法绑定到这个对象上就可以了
实例:
function list(){
return [].slice.call(arguments);
}
let l = list(1,2,3); //[1,2,3]