本文详细解析JavaScript中截取字符串的三种常用方法:substring、substr和slice。重点对比它们在单参数、双参数及负数参数下的行为差异,特别是slice与substring对负索引的不同处理逻辑,以及IE浏览器中substr处理负值的兼容性问题,帮助开发者准确选择合适的方法。
substring、substr 与 slice 基本用法
stringObject.substring(start,stop) 方法用于从字符串中提取指定下标范围内的字符。
start 参数是必需的,它代表一个非负整数,指定了子串起始字符在 stringObject 中的索引位置。
stop 参数是可选的,它指定了子串结束位置的前一个字符索引(即不包含 stop 本身)。若省略此参数,提取操作将延伸至字符串末尾。
start从0开始 到stop(不包含stop)结束 不接受负的参数。
stringObject.substr(start,length) 方法用于从字符串中提取从 start 索引开始的指定长度字符。
start 参数是必需的数值,表示子串的起始下标。若为负数,则从字符串尾部反向计算位置,例如 -1 表示最后一个字符,-2 表示倒数第二个字符。
length 参数是可选的数值,指定要提取的字符数量。若省略,则返回从 start 位置到字符串末尾的所有字符。
stringObject.slice(start,end) 方法用于提取字符串的指定片段,并返回一个新的字符串。
start 参数指定提取片段的起始下标。若为负数,则从字符串尾部反向计算,-1 代表最后一个字符,-2 代表倒数第二个字符,依此类推。
end 参数指定提取片段的结束下标(不包含 end 本身)。若省略,则提取从 start 到字符串末尾的部分;若为负数,同样从字符串尾部反向计算位置。
该方法返回的新字符串包含从 start(含)到 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 会将负索引与字符串长度相加后计算;substr 会将第一个负参数与字符串长度相加,但第二个参数若为负则转为 0;substring 则将所有负数参数强制转换为 0。
值得注意的是,IE 浏览器的 JavaScript 实现在处理 substr() 方法的负数参数时存在兼容性问题,可能会直接返回原始字符串而非预期结果。
总结
以上介绍了 JavaScript 中三种字符串截取方法的用法与区别。希望本文能帮助您根据具体需求选择合适的方法。如有任何疑问,欢迎留言交流,我们将及时回复。感谢支持!