深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性

在截取字符串时常常会用到substr()、substring()、slice()方法 , 有时混淆之间的用法 , 故总结下 。

阅读目录
slice()
substring()
substr()
总结

slice()

定义:接受一个或者两个参数 , 第一个参数指定子字符串的开始位置 。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符) , 如果没有传递第二个参数 , 则将字符串的长度作为结束位置 。

1、传递参数为正值情况:

var str ="helloWorld";// 一个参数 , 则将字符串长度作为结束位置alert(str.slice(3)); // "loWorld"// 两个参数 , 7位置上的字符为"r",但不包括结束位置的字符alert(str.slice(3,7)); // "loWo" 2、传递参数为负值的情况:

slice()方法会将传入的负值与字符串长度相加 。var str ="helloWorld";// 一个参数 , 与字符串长度相加即为slice(7)alert(str.slice(-3)); // "rld"// 两个参数 , 与字符串长度相加即为slice(3,6)alert(str.slice(3,-4)); // "loW" 3、第二个参数比第一个参数值小的情况:

slice()方法传入的第二个参数比第一个参数小的话 , 则返回空字符串 。

var str ="helloWorld";alert(str.slice(5,3)); // "" 4、IE兼容性

在IE8浏览器测试下 , 没啥问题 , 行为与现代浏览器一致 。

substring()

定义:接受一个或者两个参数 , 第一个参数指定子字符串的开始位置 。第二个参数表示子字符串的结束位置(不包括结束位置的那个字符) , 如果没有传递第二个参数 , 则将字符串的长度作为结束位置 。

1、传递参数为正值情况:与slice()方法行为相同的

var str ="helloWorld";// 一个参数 , 则将字符串长度作为结束位置alert(str.substring(3)); // "loWorld"// 两个参数 , 7位置上的字符为"r",但不包括结束位置的字符alert(str.substring(3,7)); // "loWo" 2、传递参数为负值的情况:

substring()方法会把所有负值参数转换为0 。来看下例子:

var str ="helloWorld";// 两个参数 , -4会转换为0 , 相当于substring(3,0) --即为 substring(0,3)alert(str.substring(3,-4)); // "hel" substring()方法会将较小的数作为开始位置 , 将较大的数作为结束位置 。如上面的例子substring(3,0) 与substring(0,3)是一样效果的 。

4、IE兼容性

在IE8浏览器测试下 , 没啥问题 , 行为与现代浏览器一致 。

substr()

【深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性】定义:接受一个或者两个参数 , 第一个参数指定子字符串的开始位置 。第二个参数跟之前的方法有些区别 , 表示返回的字符个数 。如果没有传递第二个参数 , 则将字符串的长度作为结束位置 。来看例子:

1、传递参数为正值情况:

var str ="helloWorld";// 一个参数 , 则将字符串长度作为结束位置alert(str.substr(3)); // "loWorld"// 两个参数 , 从位置3开始截取后面7个字符alert(str.substr(3,7)); // "loWorld" 2、传递参数为负值的情况:

substr()方法会将负的第一个参数加上字符串的长度 , 而将负的第二个参数转换为0 。

var str ="helloWorld";// 将第一个负的参数加上字符串的长度---//即为:substr(7,5) , 从位置7开始向后截取5个字符alert(str.substr(-3,5)); // "rld"// 将第二个参数转换为0// 即为:substr(3,0) , 即从位置3截取0个字符串 , 则返回空alert(str.substr(3,-2)); // "" 3、IE兼容性

substr()方法传递负值的情况下会存在问题 , 会返回原始的字符串 。IE9修复了此问题 。

总结

在传递正值参数情况下 , slice() 和 substring () 行为是一致的 , substr()方法在第二个参数上会容易混淆

推荐阅读