JavaScript中substring、substr与slice方法的区别详解

作者:拾光时间:2026-10-29 14:29:39浏览:170

本文详细解析JavaScript中substring、substr和slice三个字符串截取方法的区别。重点对比单参数与双参数场景下的行为差异,特别是处理负数索引时的不同逻辑:slice支持负数并自动转换,substr对负数第二参数有特殊处理,而substring会将所有负数视为0。此外还提及IE浏览器在substr负数处理上的兼容性问题。

substring、substr与slice基本用法对比

stringObject.substring(start,stop) 方法用于提取字符串中位于两个指定下标之间的字符序列。

start 参数是必需的,它必须是一个非负整数,用于指定要提取的子串在 stringObject 中的起始字符位置。

stop 参数是可选的,它也是一个非负整数,表示要提取的子串最后一个字符在 stringObject 中的位置加 1。若省略此参数,则返回的子串将延伸至字符串末尾。

start从0开始 到stop(不包含stop)结束 不接受负的参数。

stringObject.substr(start,length) 方法用于从字符串中提取从 start 下标开始的指定数量的字符。

start 参数是必需的,表示子串的起始下标,必须为数值。如果传入负数,则该参数声明从字符串尾部开始计算的位置,例如 -1 代表最后一个字符,-2 代表倒数第二个字符,依此类推。

length 参数是可选的,表示子串中包含的字符数,必须为数值。如果省略该参数,则返回从 stringObject 的起始位置直到字符串结尾的子串。

stringObject.slice(start,end) 方法用于提取字符串的指定部分,并返回一个新的字符串。

start 参数指定要抽取的片段的起始下标。若为负数,则表示从字符串尾部开始计算的位置,即 -1 指最后一个字符,-2 指倒数第二个字符,以此类推。

end 参数指定紧接着要抽取的片段的结尾下标。若未指定,则提取从 start 到原字符串结尾的所有字符。若 end 为负数,则表示从字符串尾部开始计算的位置。

该方法返回一个新的字符串,包含从 start(包括 start)到 end(不包括 end)之间的所有字符。


string.slice()
string.substring()
string.substr()
 
var stringValue = “hello world”;
alert(stringValue.slice(3));          //”lo world”
alert(stringValue.substring(3));      //”lo world”
alert(stringValue.substr(3));        //”lo world”
alert(stringValue.slice(3,7));         //”lo w”
alert(stringValue.substring(3,7));    //”lo w”
alert(stringValue.substr(3,7));       //”lo worl”

当只传入一个参数 n 时,三个方法均会从第 n 个位置(索引从 0 开始)开始返回剩余的字符串。

当传入两个参数 n 和 m 时,slice 与 substring 会从第 n 个位置开始,返回到第 m 个位置(不包含第 m 个位置)的字符串;而 substr 则返回从第 n 个位置开始的 m 个字符。


string.slice()
string.substring()
string.substr()
var stringValue = “hello world”;
alert(stringValue.slice(-3));          //”rld”
alert(stringValue.substring(-3));      //”hello world”
alert(stringValue.substr(-3));        //”rld”
alert(stringValue.slice(3,-4));         //”lo w”
alert(stringValue.substring(3,-4));    //”hel”
alert(stringValue.substr(3,-4));       //”"(空字符串)

负数参数处理机制差异

当参数为负值时,slice 会将传入的负值与字符串长度(string.length)相加后进行计算;substr 会将第一个负参数加上字符串长度,而将第二个参数转换为 0;substring 则会将所有负值都转换为 0。

在 IE 浏览器的 JavaScript 实现中,向 substr() 方法传递负值时存在兼容性问题,该方法会直接返回原始字符串。

作者最新文章