字符串方法负数参数计数规则及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.
相关产品推荐
相关产品推荐

