JavaScript字符串slice()方法严格按索引计算:负索引从末尾计数,不纠错不报错;start≥end时返回空串;越界索引安静处理;对Unicode字符按UTF-16码元操作,需用Array.from()处理emoji等。

JavaScript 字符串的 slice() 方法在边界处理上简洁明确,但几个关键点容易被忽略——它不报错、不纠错、不自动调整参数,所有行为都严格按索引计算。
负索引从末尾算起,不转正也不截断
负数参数直接表示从字符串末尾开始计数:-1 是最后一个字符,-2 是倒数第二个……这个换算不依赖字符串长度,也不做越界校验。
-
"abc".slice(-1)→"c" -
"abc".slice(-5)→"abc"(-5 小于 -3,等价于从索引 0 开始) -
"abc".slice(-10, -8)→""(换算后起始位置超出范围,返回空字符串)
起始大于等于结束时,一律返回空字符串
不同于 substring 的自动交换,slice 对参数顺序完全“诚实”:只要 start >= end(无论正负),结果就是空串。
-
"hello".slice(3, 1)→"" -
"hello".slice(-2, -4)→""(-2 换算为 3,-4 换算为 1,3 > 1) -
"x".slice(10, 20)→""(起始已越界,但逻辑仍成立)
越界索引安静处理,不抛错也不补位
当 start 超出字符串长度(正向或负向),slice 直接返回空字符串;当 end 越界,则自动截断到末尾。
-
"a".slice(5)→"" -
"a".slice(0, 100)→"a" -
"ab".slice(-10)→"ab"(-10 换算为 0)
空字符串和 emoji 等 Unicode 字符需额外注意
slice 按 UTF-16 码元操作,对 emoji 或组合字符无感知:
-
"?♂️".length是 7,"?♂️".slice(0, 2)会切出乱码 - 安全截取视觉字符应先用
Array.from(str)转为字素数组,再.slice().join("") -
"".slice(0, 1)→""(空字符串调用 slice 总是返回空字符串)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











