一、slice(数组和字符串都可用)

1. slice(数组)

  • 用法:array.slice(begin,end)
  • 解析:该方法是对数组进行部分截取,并返回一个数组副本;参数begin指的是开始截取的数组索引,参数end指的是结束截取的索引,但是真正截取的部分是从begin这个索引对应的元素开始截取到end对应索引的元素的前一个元素,也就是说截取的部分是包含begin对应的元素,但不包含end索引对应的元素,具体实现看下面例子。
    //如果不传入参数二,那么将从参数一的索引位置开始截取,一直到数组尾var a=[1,2,3,4,5,6];
    var b=a.slice(0,3);    //[1,2,3],返回的对象是包含了索引0对应的元素,但不包含索引3的元素。
    var c=a.slice(3);       //[4,5,6] 
 
    //如果两个参数中的任何一个是负数,array.length会和它们相加,试图让它们成为非负数,举例说明:
    //当只传入一个参数,且是负数时,length会与参数相加,然后再截取
    var a=[1,2,3,4,5,6];
    var b=a.slice(-1);    //[6]
    //当只传入一个参数,是负数时,并且参数的绝对值大于数组length时,会截取整个数组
    var a=[1,2,3,4,5,6];
    var b=a.slice(-6);    //[1,2,3,4,5,6]
    var c=a.slice(-8);    //[1,2,3,4,5,6]
 
    //当传入两个参数一正一负时,length也会先于负数相加后,再截取
    var a=[1,2,3,4,5,6];
    var b=a.slice(2,-3);    //[3]//当传入一个参数,大于length时,将返回一个空数组
    var a=[1,2,3,4,5,6];var b=a.slice(6);  //[]

2. slice(string)

  • 用法:string.slice(begin,end)
  • 解析:slice方法复制string的一部分来构造一个新的字符串,用法和数组的slice类似。
//举个简单的例子
var a="i am a boy";
var b=a.slice(0,6);    //"i am a"

二、splice(数组)

  • 用法:array.splice(start, deleteCount, item…)
  • 解析:splice方法从array中移除一个或多个元素,并用新的item替换它们。参数start是从数组array中移除元素的开始位置,而参数deleteCount是要移除元素的个数。如果有额外的参数,那么item将会插入到被移除元素的位置上,它返回一个包含被移除元素的数组。
let arr1 = ['a','b','c','d'];
let arr2 = arr1.splice(0,1,'e','f'); // 从索引为0的位置开始删除1个元素,然后将'e'和'f'插入到索引为0这个位置里。
console.log(arr1); // arr1 = ['e', 'f', 'b', 'c', 'd'] 
console.log(arr2); // arr2 = ['a'] arr2接收的是被移除的元素

slice和splice的区别:

  • slice方法对数组和字符串都可以用,splice只用于数组。
  • slice会返回一个处理后副本,且原来的元素是不会改变的。而splice会直接修改原来的数组,且返回一个装有被删除元素的数组。