版权声明:本文为博主原创文章,如果转载,请注明出处,谢谢。 https://blog.csdn.net/u013719339/article/details/82501767
ECMAScript提供了三个基于子字符串创建新字符串的方法:slice()、substr()、substring()。它们都能够截取字符串,并且不影响原始字符串。
首先,用表格看一下它们的基本异同:
序号 | 方法 | slice() | substr() | substring() |
---|---|---|---|---|
0 | 功能 | 基于子字符串创建新字符串 | 基于子字符串创建新字符串 | 基于子字符串创建新字符串 |
0.1 | 返回值 | 一个基本类型的子字符串值 | 一个基本类型的子字符串值 | 一个基本类型的子字符串值 |
0.2 | 对原数组的影响 | 不影响 | 不影响 | 不影响 |
0.3 | 参数1 | 起始位置(含) | 起始位置(含) | 起始位置(含)或结束位置(不含) |
0.4 | 参数2 | 结束位置(不含) | 返回的字符个数 | 起始位置(含)或结束位置(不含) |
1 | 有1个参数时输出值 | 起始位置(含)到字符串结束 | 起始位置(含)到字符串结束 | 起始位置(含)到字符串结束 |
2 | 有2个参数时输出值 | 根据参数输出 | 根据参数输出 | 根据参数输出 |
2.1 | 输出值起始位置 | 参数1 | 参数1 | 参数1和参数2中较小数 |
2.2 | 输出值结束位置 | 参数2 - 1 | 参数1 + 参数2 - 1 | 参数1和参数2中较大数 - 1 |
3 | 参数1为负数 被转换的值 |
参数1 + str.length | 参数1 + str.length | 0 |
4 | 参数2为负数 被转换的值 |
参数2 + str.length | 0 | 0 |
5 | 2个参数都为0 | 空字符串 | 空字符串 | 空字符串 |
根据上面的表格,基于str字符串获取子字符串:
var str = "helloya"; //length = 7
1. 有1个参数
str.slice(1); //elloya 参数:起始位置(含) 输出起始位置到结束
str.substr(1); //elloya 参数:指定字符串的起始位置(含) 输出起始位置到结束
str.substring(1); //elloya 参数:指定字符串的起始位置(含) 输出起始位置到结束
2. 有2个参数
str.slice(1, 3); //el 参数:起始位置(含),结束位置(不含),以第一个参数为开始位置,第二个参数为结束位置
str.substr(1, 3); //ell 参数:起始位置(含),返回的字符个数
str.substring(1, 3); //el 参数:指定字符串的起始位置,结束位置(不含),以较小数为开始位置,较大数为结束位置
3. 参数1为负数
str.slice(-1); //a 参数值被转换为:参数+length,此处即为-1+7=6,输出该位置到结束
str.substr(-1); //a 第一个参数值被转换为:参数+length,此处即为-1+7=6,输出该位置到结束
str.substring(-1); //helloya 第一个参数被转换为0,输出该位置到结束,即返回全部字符串
4. 参数2为负数
str.slice(1, -3); //ell 第二个参数值被转换为:参数+length,此处即为-3+7=4
str.substr(1, -3); // 空字符串 第二个参数值被转换为0,即返回包含0个字符的字符串
str.substring(1, -3); //h 第二个参数值被转换为0,以较小数为开始位置,较大数为结束位置,则等价于(0, 1)
5. 2个参数都为0
str.slice(0, 0); // 空字符串
str.substr(0, 0); // 空字符串
str.substring(0, 0); // 空字符串
6. 2个参数都为负数
str.slice(-1, -3); // 空字符串 被转换为(-1+7, -3+7)=(6, 4),开始位置大于结束位置,返回空字符串
str.substr(-1, -3); // 空字符串 第二个参数值被转换为0,即返回包含0个字符的字符串,不用考虑第一个参数
str.substring(-1, -3); // 空字符串 两个参数都被转换为0,则返回空字符串