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

为什么JavaScript的slice方法使用负数参数时计数逻辑似乎不同?

slice负数参数返回结果原理解答

核心规则

JavaScript中String.prototype.slice()的负数参数会按如下规则转换为正索引再执行截取:
转换后正索引 = 字符串总长度 + 负数参数
截取逻辑和正参数完全一致:左闭右开,包含起始索引对应字符,不包含结束索引对应字符。

你的代码计算过程

你使用的字符串为:

let str = "Apple, Banana, Kiwi";

首先计算该字符串总长度:str.length = 19
现在对slice(-12, -6)的两个参数做转换:

  • 起始参数-12 → 19 + (-12) = 7
  • 结束参数-6 → 19 + (-6) = 13

转换后代码等价于你之前成功截取到Banana的写法:

str.slice(7,13)

所以返回结果自然为Banana。

常见误解原因

你预估会得到带空格的Banan,通常是负数索引计数错误导致:
负数索引是从字符串最后一个字符开始倒序标记的:str.slice(-1)对应最后一个字符i(Kiwi的末尾i),倒推到-6对应的是Banana后的逗号,-12对应的是Banana的首字符B,截取区间刚好覆盖完整的Banana,没有前置空格,也不会丢失末尾的a。


内容的提问来源于stack exchange,提问作者chris13

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:54:02