slice()、substring()、substr()三者的区别
三种常用截取字符串方法
-
slice():截取字符串的某个部分,返回被提取的部分。
-
substring(indexStart, indexEnd):返回一个字符串在开始索引到结束索引之间的字符串。省略indexEnd,则提取字符一直到字符串末尾。
-
substr():接受一个或者两个参数,第一个参数指定子字符串的开始位置。第二个参数跟之前的方法有些区别,表示返回的字符个数。如果没有传递第二个参数,则将字符串的长度作为结束位置。
slice()、substring()、substr() 三者的区别
1. IE兼容性
slice()
在IE8浏览器测试下,没啥问题,行为与现代浏览器一致substring()
在IE8浏览器测试下,没啥问题,行为与现代浏览器一致substr()
传递负值的情况下会存在问题,会返回原始的字符串。IE9修复了此问题
2. 传递正值
slice()
与substring()
行为相同,第二个参数表示字符串的结束位置(不包括结束位置的那个字符)substr()
第二个参数表示返回的字符个数
3. 传递负值
slice()
会将传入的负值与字符串长度相加substring()
不接受负的参数,substring()
方法会把所有负值参数转换为0substr()
方法会将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0,且负值情况下会出现IE兼容性问题
综上所述:一般推荐使用slice()方法。
let str ="helloWorld";
// ---------------------------slice----------------------------------
// 一个参数,则将字符串长度作为结束位置
console.log(str.slice(3)); // "loWorld"
// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
console.log(str.slice(3,7)); // "loWo"
// 一个参数,与字符串长度相加即为slice(7)
console.log(str.slice(-3)); // "rld"
// 两个参数,与字符串长度相加即为slice(3,6)
console.log(str.slice(3,-4)); // "loW"
// slice()方法传入的第二个参数比第一个参数小的话,则返回空字符串
console.log(str.slice(5,3)); // ""
// ---------------------------substring----------------------------------
// 一个参数,则将字符串长度作为结束位置
console.log(str.substring(3)); // "loWorld"
// 两个参数,7位置上的字符为"r",但不包括结束位置的字符
console.log(str.substring(3,7)); // "loWo"
// 两个参数,-4会转换为0,相当于substring(3,0) -->即为 substring(0,3)
// substring()方法会将较小的数作为开始位置,将较大的数作为结束位置。所以substring(3,0) 与substring(0,3)是一样效果的
console.log(str.substring(3,-4)); // "hel"
// ---------------------------substr----------------------------------
// 一个参数,则将字符串长度作为结束位置
console.log(str.substr(3)); // "loWorld"
// 两个参数,从位置3开始截取后面7个字符
console.log(str.substr(3,7)); // "loWorld"
// 将第一个负的参数加上字符串的长度--->
// 即为:substr(7,5) ,从位置7开始向后截取5个字符
console.log(str.substr(-3,5)); // "rld"
// 将第二个参数转换为0
// 即为:substr(3,0),即从位置3截取0个字符串,则返回空
console.log(str.substr(3,-2)); // ""