《substr/substring/slice的区别》

一、语法对比

1、substr

字符串中抽取从 开始 下标开始的指定数目的字符,参数:

  • start 必需。要抽取的子串的起始下标。必须是数值。如果是负数,那么该参数声明从字符串的尾部开始算起的位置。也就是说,-1 指字符串中最后一个字符,-2 指倒数第二个字符,以此类推
  • end 可选。子串中的字符数。必须是数值。如果省略了该参数,那么返回从 stringObject 的开始位置到结尾的字串

string.substr(start,length)  

2、 substring

提取字符串中介于两个指定下标之间的字符,返回的子串包括 开始 处的字符,但不包括 结束 处的字符,参数:

  • from 必需。一个非负的整数,规定要提取的子串的第一个字符在 string Object 中的位置
  • to 可选。一个非负的整数,比要提取的子串的最后一个字符在 string Object 中的位置多 1。如果省略该参数,那么返回的子串会一直到字符串的结尾

string.substring(from, to)  

3、 slice

提取字符串的某个部分,并以新的字符串返回被提取的部分,参数:

  • start 必须。 要抽取的片断的起始下标,第一个字符位置为 0。如果为负数,则从尾部开始截取。
  • end 可选。 紧接着要截取的片段结尾的下标。若未指定此参数,则要提取的子串包括 start 到原字符串结尾的字符串。如果该参数是负数,那么它规定的是从字符串的尾部开始算起的位置。slice(-2) 表明提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。

string.slice(start,end)

二、示例

var str="Hello world!";

1、只传一个参数 m
substr/substring/slice 直接从第 m 位,截取到末尾

str.substr(3) // lo world!
str.substring(3)  // lo world!
str.slice(3) // lo world!

2、传两个参数 m,n
substr 从m位开始,取 n 个字符
substring 即从第 m 位取到第 n 位, m > n ,则mn 交换位置
slice 即从第 m 位取到第 n 位, m > n ,则返回空字符串

// 从第3位取7个字符
str.substr(3, 7) // lo worl,

// substring/slice 前闭后开,从第3位取到第6位
str.substring(3, 7) // lo w
str.slice(3, 7) // lo w

3、参数是负数
参数是负值 -m,-n
substr 会将 -m 参数加上字符串长度 length-n 转换为0(注意,NaN也会转为0)
substring 会将 -m-n 都转换成0
slice 会将 -m-n 与字符串长度 length 相加

// 会将第一个负值参数加上字符串长度,第二个转换为0
str.substr(-2) // d!

// 会将所有负值都转换成0
str.substring(-2) // Hello world!

// 会将负值与字符串长度 length 相加
str.slice(-2) // d!

© 版权声明

相关文章

暂无评论

none
暂无评论...