在这我先定义一个字符串
let str = '123456789';
假如我要截取指定字符串567,有多种方法下列我将讲到其中的相同处与不同处并会写个总结(如有需要直接前往最下面)
slice()方法
slice(a,b),截取指定的下标,返回被截取的值不会改变原字符串,a为截取的开始下标,b为截取的结束下标,a,b都可以为负数从后往前数,当第一个参数大于第二个参数时,返回空
当没有参数时:
console.log(str.slice());
可以看到就把当前全部截取下来了
当有一个参数时:
console.log(str.slice(4));
可以看到从下标为4时后面全部截取出来了
当有两个参数时:
console.log(str.slice(4,7));
到这里可能会有小伙伴好奇了,第二个参数为7那不是应该截取到下标为7的时候吗,这里要注意了slice()方法它是包头不包尾的,你可以看成数组一样左边是闭区间,右边是开区间
特殊情况:
当第一个参数为负数时:
console.log(str.slice(-2));
当为负数时它就会从后往前数,因为只有一个参数就截取了从-2下标开始后面所有的
当两个参数都为负数时:
console.log(str.slice(-4,-2));
当两个都为负数时,一样的从后往前数,然后包头不包尾的截取
当第一个参数为正数时,第二个为负时也是一样的截取(这里就不放图了)
注意:
当第一个参数为负数,第二个参数为正时:
console.log(str.slice(-2,4));
结果会返回一个空值,
当第一个参数大于第二个参数时也会返回空值
console.log(str.slice(5,4));
substr()方法
substr(a,b),a是截取的开始下标,b是截取的长度,a可以为负数从后往前数,b长度不能为负数,截取指定的下标与指定的个数,不会破坏原数组
当没有参数时也是一样的截取全部(这里也不放图了)
当有一个参数时:
console.log(str.substr(4));
可以看到跟slice方法一样从下标为4时开始截取后面所有的
当有两个参数时:
console.log(str.substr(4,3));
可以看到第二个参数与slice方法不一样,这里第二个参数是你要截取的个数
当第一个参数为负数时:
console.log(str.substr(-2));
在这只有一个参数时跟前面没有区别
当两个参数都为负数时
console.log(str.substr(-2,-1));
因为截取的个数不能为负数,所以这里会返回一个空值
当第一个参数为负,第二个参数为正时也是一样的(这里也不放图了)
substring()方法
substring(a,b),截取指定的下标,返回被截取的值不会改变原字符串,a为截取的开始下标,b为截取的结束下标,a,b都不能为负数,如果为负数时会等于0,当第一个参数大于第二个参数时,会自动调换位置再截取同样包头不包尾
这个方法当参数都为正时基本都与slice方法一样就不细写相同点了,可以看上面slice详解
不同点在于当第一个参数与第二个参数都为负时:
console.log(str.substring(-2,-1));
返回的是一个空值,因为参数不能为负数,为负数时等于0,开始下标与结束下标都为0时自然就截取了一个空
当第一个为负数时
console.log(str.substring(-2,));
因为两个参数都不能为负数,如果为负数时会等于0,所以就截取了全部
当第一个参数为负数,第二个参数为正时
console.log(str.substring(-2,4));
因为开始下标为负数所以从0开始算,同样与slice一样包头不包尾
当第一个参数为正数,第二个为负数时就会截取当前那一个
split()方法
split(a),该方法比较特殊只有一个参数,a为被切割的字符串,返回的是一个数组
console.log(str.split(2));
结果是2被截取掉了,然后把数字2前面的和后面的分割出来了
这个比较特殊重新写一个数组
let str = '123123';
console.log(str.split(2));
结果就是把全部数字2截取掉了然后前后都分割开来成为字符串
当没有参数时截取的也是全部然后返回一个数组,数组里面是一个全部的字符串(这里也不放图了)
特殊情况:
当参数为“”空时:
console.log(str.split(""));
结果就会把他们全部单独分割出来,因为字符串中间都会有空所以它把空当成了分割点
总结:
slice(a,b),截取指定的下标,返回被截取的值不会改变原字符串,a为截取的开始下标,b为截取的结束下标,a,b都可以为负数从后往前数,当第一个参数大于第二个参数时,返回空
substr(a,b),a是截取的开始下标,b是截取的长度,a可以为负数从后往前数,b长度不能为负数,截取指定的下标与指定的个数,不会破坏原数组
substring(a,b),截取指定的下标,返回被截取的值不会改变原字符串,a为截取的开始下标,b为截取的结束下标,a,b都不能为负数,如果为负数时会等于0,当第一个参数大于第二个参数时,会自动调换位置再截取同样包头不包尾
split(a),该方法比较特殊只有一个参数,a为被切割的字符串,返回的是一个数组(这个比较特殊建议看一看)