为何JavaScript中slice(-3, 0)无法得到预期字符串?
问题解析与解决方案
为什么 slice(-3, 0) 返回空字符串?
JavaScript 的 slice(start, end) 方法遵循以下核心规则:
- 负数的
start参数会被转换为「字符串总长度 + 负数数值」,比如对长度为5的'12345',-3会被转为5 + (-3) = 2。 end参数指定截取的结束位置(不包含该位置的字符),如果传0就表示截取到索引0的位置。- 关键判定:当转换后的
start大于等于end时,slice直接返回空字符串。这里start是2,end是0,满足2 >= 0,所以结果为空。
而你第一次写的slice(-3)因为只传了start,end默认是字符串的总长度(5),相当于从索引2截取到5,自然得到'345'。
如何实现预期得到'345'?
有几种直接的写法:
- 保持只传
start参数:console.log('12345'.slice(-3));(就是你第一个成功的写法) - 显式传入正确的
end参数:console.log('12345'.slice(-3, 5));或者console.log('12345'.slice(-3, undefined));(undefined会触发end使用默认值) - 直接使用正数索引:
console.log('12345'.slice(2));
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

