slice,substr,substring三者的区别

我们先看一段简单的输出对比

var a = 'hellojavascript'
console.log(a.slice(3,5));//lo
console.log(a.substring(3,5));//lo
console.log(a.substr(3,5));//lojav

slice  和 substring 都是截取字符串(开始位置,结束位置)不包括结束位置的字符,而substr是截取字符串(开始位置,截取字符个数)。

var a = 'hellojavascript'

console.log(a.slice(5,3)); //空
console.log(a.substring(5,3));//lo
console.log(a.substr(5,100));//javascript

调转后两个参数后我们发现slice要求前一个参数必须比后面的参数小,不然会返回空。而substring会自动调转顺序,所以和之前的输出没差。substr除了前一个参数超出数据源的长度会返回空外,不会有太大影响,最多是把指定位置后面的数字全部输出。

接下来再看几个例子

var a = '0123456789'
console.log(a.slice(-1,-6)); //空 
console.log(a.slice(-5,-3)); //56
console.log(a.slice(5,-2)); //567
console.log(a.slice(5,-6)); //空


console.log(a.substring(-1,-6)); //空 
console.log(a.substring(-5,-3)); //空
console.log(a.substring(5,-2)); //01234
console.log(a.substring(6,-6)); //012345


console.log(a.substr(-1,-6)); //空 
console.log(a.substr(-5,-3)); //空
console.log(a.substr(-5,2)); //56
console.log(a.substr(-5,6)); //56789

可以看出,如果传入的值是负数。slice依然是要求前一个参数必须比后面的参数小,不然会返回空,比如在最后一个例子中 (5,-6)可以看作是 (5,4) 即负数时可以看作从后往前数。substring则把后一个参数的负数视作为0,但如果前一个参数为负数则直接返回空。substr如果后面的参数为负数则返回空值。

以上便是我的见解,有错欢迎大家在评论区指正

你可能感兴趣的:(javascript)