对js数组的操作是一个绕不开的问题,所以今天做一个总结。
首先对于数组来说,他是引用类型,这一点需要牢记。
Array.prototype.slice([begin[,end]])
方法接受两个参数就是截取的begin,end两个参数,可以看出两个参数都是可选的,如果没有传递参数的话,默认表示对一个数组进行浅拷贝,返回一个新数组。
let arr1 = [1,2,3,4]; let arr2 = arr1.slice(); arr2 // [1,2,3,4] arr1 === arr2 //false
通过这种方法可以获得一个新数组,且两者互不相关
begin表示从何处开始截取数组,end表示结束位置,但要注意的是,截取的数组是从begin到(end-1),这一点需要注意
arr = [1,2,3,4]; arr1 = arr.slice(1,3); arr1 // [2,3];
如果省略第二个参数,则默认为array.length,也就是截取到最后,第一个参数可以为负数,则从倒数位置截取,例如
arr = [1,2,3,4]; arr.slice(-2) // [3,4]
查看源码后可以看到
var start = begin || 0; start = (start >= 0) ? start : Math.max(0, len + start);
如果传入一个负值的话就会判断 加上数组长度然后和0比较大小,如果负值小于数组长度就从倒数的位置作为begin,否则就将0作为开始;
另外需要注意的是slice拷贝数组的话属于数组的浅拷贝,使用的时候需要小心;