JavaScript 数组slice操作

对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拷贝数组的话属于数组的浅拷贝,使用的时候需要小心;

猜你喜欢

转载自www.cnblogs.com/petterguo/p/9067734.html