JavaScript字符串不可变,所有方法均返回新字符串;slice推荐替代substring和substr;includes、indexOf等用于查找判断;split与join高频配合使用。
JavaScript 中的字符串是原始类型,一旦创建就无法修改。所有所谓“操作”实际都是生成新字符串,原字符串保持不变。这点常被初学者忽略,导致 str.toUpperCase() 后忘记赋值,结果还是旧值。
str.replace() 只替换第一个匹配项,要全局替换得用正则: str.replace(/a/g, 'b')
str.slice()、str.substring()、str.substr() 行为不同: substr() 已被废弃,slice() 支持负数索引,substring() 会自动交换参数顺序arr.join('') 比循环 += 更快,尤其在长文本场景下三者都返回子串,但处理负数和参数顺序的方式完全不同,混用容易出错。
const str = 'hello'; str.slice(1, 4); // 'ell' str.slice(-4, -1); // 'ell' ← 负数从末尾计数 str.substring(1, 4); // 'ell' str.substring(-4, -1); // '' ← 负数被转为 0 str.substring(4, 1); // 'ell' ← 自动交换 1 和 4
推荐统一用 slice():语义清晰、支持负索引、不魔改参数,现代代码中已基本替代另两个。
这些方法返回布尔值或索引,适用于条件判断和定位。注意大小写敏感,且 includes() 不支持正则。
str.includes('abc') → 布尔值,ES6+,最常用str.indexOf('abc') → 返回首个匹配索引,没找到为 -1,兼容性最好str.startsWith('abc', 2) → 从位置 2 开始检查是否以 'abc' 开头str.endsWith('xyz', 5) → 检查前 5 个字符是否以 'xyz' 结尾如果需要正则查找(比如忽略大小写),必须用 str.search(/abc/i) 或 str.match(/abc/gi),不能靠上面几个方法。
split() 把字符串切为数组,join() 把数组拼回字符串。它们常配合使用,比如清洗空格、去重、格式化。
const csv = 'a, b , c';
csv.split(',').map(s => s.trim()).join('|'); // 'a|b|c'
注意:split('') 可将字符串转为字符数组;但若字符串含 emoji 或代理对(如 ?),split('') 仍可能出错,更安全用 [...str] 或 
Array.from(str)。
正则作为 split() 参数时(如 split(/\s+/)),能处理多个连续分隔符,这是纯字符串分隔做不到的。