JS字符串拼接用+(支持隐式转换)或concat(强类型校验);截取推荐slice(负数计数、不交换参数),substring兼容老项目(负数转0、自动交换参数),substr已废弃。

JS 中字符串拼接和截取是高频操作,核心在于选对方法、理解参数逻辑,避免因负数处理或边界行为出错。
字符串拼接的两种主流方式
拼接本质是生成新字符串(原字符串不可变):
-
加号(+)运算符:最常用,支持任意类型隐式转字符串,如
'Hello' + ' ' + 42→"Hello 42";但要注意数字优先级,1 + 2 + '3'得"33",而1 + '2' + 3得"123" -
concat() 方法:只接受字符串参数,不自动转换类型,
'a'.concat('b', 'c')→"abc";传入非字符串(如数字)会报错,适合强类型校验场景
按索引截取:slice、substring、substr 的关键区别
三者都返回新字符串,但语义和容错机制不同:
-
slice(start, end):推荐首选。支持负数(从末尾计数),
str.slice(-3)取后三位;start > end时返回空串,不交换 -
substring(start, end):兼容老项目。负数全转为 0;若
start > end,自动调换顺序,str.substring(5, 2)等价于str.substring(2, 5) - substr(start, length):已废弃,MDN 明确不建议新代码使用。第二个参数是长度而非结束索引,负数起始位从末尾算,但长度为负时结果为空串
按内容或规则截取的实用技巧
当需求超出简单索引时,可组合其他方法:
- 取文件名不含扩展名:
name.substr(0, name.lastIndexOf('.'))(注意 substr 已废弃,更安全写法是name.slice(0, name.lastIndexOf('.'))) - 按分隔符切分再重组:
'a,b,c'.split(',').slice(0, 2).join('-')→"a-b" - 用正则提取关键段:
'id=123&name=test'.match(/id=(\d+)/)[1]→"123"
取单个字符的稳妥写法
避免越界问题:
-
str.at(-1):ES2022 新增,支持负索引,越界返回undefined,推荐用于首尾字符获取 -
str.charAt(i):越界返回空字符串,兼容性好(IE8+) -
str[i]:简洁但越界返回undefined,且 IE6–IE8 不支持


















