String.prototype.substr()
substr() 函数用于返回当前字符串中一个连续的片段。
语法
语法:
str.substr( from [, length] )
类型声明:
interface String {
  substr(from: number, length?: number): string;
}
参数说明:
| 参数 | 说明 | 类型 | 
|---|---|---|
| from | 指向字符串指定部分的开头的索引。 | number | 
| length | 可选,返回的子字符串片段中包含的字符数。 | number | 
方法说明
substr() 函数从 str 的索引 from 处开始复制,直到复制 length 个字符或字符串的结尾为止。
- 如果 from为正值,且大于或等于字符串的长度,则返回一个空字符串。
- 如果 from为负值,则将其视为str.length + from开始的一个字符索引。若str.length + from大于字符串的长度,则使用 0 作为开始提取的索引。
- 如果 length为负数或 0,则不会复制任何字符,返回空字符串。
- 如果省略了 length参数,则一直复制到字符串的结尾。
代码示例
基本用法
var str = 'Hello world!';
// 开始索引为1,截取长度为2
str.substr(1, 2);
// 'el'
// 开始索引为 -3+10=7,截取长度为2
str.substr(-3, 2);
// 'or'
// 开始索引为 -3+10=7,截取长度为延伸至字符结尾
str.substr(-3);
// 'orld!'
// 开始索引为 1,截取长度为延伸至字符结尾
str.substr(1);
// 'Hello world!'
// 开始索引为 -20+10=-10 即 0,截取长度为2
str.substr(-20, 2);
// 'He'
// 开始索引为 20 大于字符串长度(返回空字符串),截取长度为 2
str.substr(20, 2);
// ''
// 开始索引为 0,截取长度为 -1 和 0(返回空字符串)
str.substr(0, -1);
// ''
str.substr(0, 0);
// ''
兼容性代码
Microsoft's JScript 不支持负数的 from 参数,如果想充分利用该方法,需要使用下面的兼容代码修复 BUG:
// only run when the substr function is broken
if ('ab'.substr(-1) != 'b') {
  /**
   *  Get the substring of a string
   *  @param  {integer}  start   where to start the substring
   *  @param  {integer}  length  how many characters to return
   *  @return {string}
   */
  String.prototype.substr = (function (substr) {
    return function (start, length) {
      // did we get a negative start, calculate how much it is
      // from the beginning of the string
      if (start < 0) start = this.length + start;
      // call the original function
      return substr.call(this, start, length);
    };
  })(String.prototype.substr);
}