JavaScript中String的substring与slice方法差异解析
本文详细解析JavaScript中String类的substring与slice方法。两者在正数参数下行为一致,主要区别在于处理负数参数时:slice会将负索引转换为字符串长度加负值,而substring则将其视为0。通过具体代码示例展示了这一关键差异,帮助开发者避免潜在错误。
substring与slice方法的基本用法
在相关技术文档的2.8.4节中,介绍了String类提供的substring()和slice()方法。这两个方法在常规使用场景下,其调用方式及返回结果几乎完全一致。具体表现如下例所示:
相关代码实现如下:
var strObj = new String("hello world");
alert(strObj.slice(3)); // 输出结果:"ol world"
alert(strObj.subString(3)); // 输出结果:"ol world"
alert(strObj.slice(3, 7)); // 输出结果:"lo w"
alert(strObj.subString(3,7)); // 输出结果:"lo w" 从上述代码的执行结果可以看出,slice()与substring()在调用形式和最终输出上完全相同。这两种方法均用于获取字符串的子串,且都支持接收一个或两个参数。其中,第一个参数指定子串的起始位置;若提供第二个参数,则指定终止位置,若省略该参数,则默认截取至字符串末尾。此外,这两种方法都不会修改原始String对象的值。
负数参数处理机制的差异
既然功能看似相同,为何要保留两个方法?实际上,二者并非完全等价,其核心差异体现在处理负数参数时的逻辑不同。
当传入负数参数时,slice()方法会将字符串长度与负数参数相加来计算实际索引;而substring()方法则直接将负数参数视为0处理。具体对比如下:
相关代码实现如下:
var strObj = new String("hello world");
alert(strObj.slice(-3)); // 输出结果:"rld"
alert(strObj.subString(-3)); // 输出结果:"hello world"
alert(strObj.slice(3,-4)); // 输出结果:"lo w"
alert(strObj.subString(3,-4)) // 输出结果:"hel" 通过上述对比即可清晰看到slice()与substring()的主要区别。以仅传入参数-3为例,slice()返回"rld",而substring()返回完整的"hello world"。原因在于,对于字符串"hello world",slice(-3)会被内部转换为slice(8),而substring(-3)则被转换为substring(0)。同样,当使用参数3和-4时,差异也十分明显:slice()方法将其转换为slice(3,7),这与前述示例一致,返回"lo w";而substring()方法则将这两个参数解释为substring(0,3)。这是因为substring()总是将较小的参数作为起始位置,较大的参数作为终止位置,因此实际执行的是substring(0,3),返回"hel"。
JavaScript异步发送HTTP请求时怎么优雅地处理错误
2026-11-05 17:10:44
5款主流JS在线运行工具对比:CodePen、JSFiddle与StackBlitz怎么选
2026-11-05 17:04:04
JavaScript入门书籍避坑:这些书不适合初学者
2026-11-05 16:31:15
JS使用Math.round实现保留两位小数的原理与代码
2026-11-05 15:35:55
JavaScript 原生 Date 对象怎么实现日期加减
2026-11-05 14:30:00
