You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字符串方法负数参数计数规则及slice方法末尾索引疑问

JavaScript字符串负数索引规则详解

让我一步步帮你理清这两个问题,再结合示例代码解释清楚:

问题1:当字符串方法的参数为负数时,是否从末尾开始以0为起始计数?

完全不是这样哦。当字符串方法(像slice()、substr()这类常用方法)接收负数参数时,负数索引是从字符串末尾开始算,以-1作为最后一个字符的起始索引,而不是0。简单来说,负数参数会自动转换成「字符串总长度 + 负数参数」的正索引。比如一个长度为10的字符串,-1对应索引9(最后一个字符),-2对应索引8,以此类推。

问题2:末尾字符的计数索引应为0还是1?

得分两种索引场景来看:

  • 用正索引时:字符串的末尾字符索引是「字符串长度 - 1」,因为正索引是从0开始计数的(第一个字符是0);
  • 用负索引时:末尾字符的索引直接是-1,这是负索引的规则——从末尾倒着数,第一个(最后一个字符)就是-1。

示例代码拆解

来看你给出的这段代码:

var word = "My_name_is_Joe";
console.log(word.slice(-3,-1));

首先,我们可以用word.length拿到这个字符串的长度是14。

按照负数索引转正索引的规则:

  • slice的第一个参数-3会转换成 14 + (-3) = 11,对应字符串里的字符J;
  • 第二个参数-1会转换成 14 + (-1) = 13,对应字符e;

而slice(start, end)遵循左闭右开的规则:包含start位置的字符,但不包含end位置的字符。所以这段代码会截取索引11到13之间的字符(也就是J和o),最终控制台会输出"Jo"。

内容的提问来源于stack exchange,提问作者Yanjan. Kaf.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:20:51