基于子字符串创建新字符串的方法:slice()、substr()、substring()

版权声明:本文为博主原创文章,如果转载,请注明出处,谢谢。 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,则返回空字符串

猜你喜欢

转载自blog.csdn.net/u013719339/article/details/82501767