JavaScript字符串不可变,所有操作返回新字符串;安全拆分用[...str]或Array.from();includes()适合判断存在性,indexOf()适合定位;replace()默认只替换首个匹配,全局替换需/g或replaceAll()。

JavaScript 字符串是原始类型,不可变,所有“修改”操作实际都返回新字符串——这是绝大多数意外行为的根源。
字符串转数组用 split(),但空字符串不能直接 split('') 拆成字符数组?
可以,split('') 是合法且常用的做法,但要注意:它会把 Unicode 组合字符(如带重音符号的字母、emoji)错误切开。比如 '??'.split('') 返回 ['?', '', '?'](4 个元素),而非预期的 1 个。
- 安全拆分单个字符用
[...str](扩展运算符)或Array.from(str),它们按 Unicode 码点正确处理组合字符 -
split('')适合纯 ASCII 场景,性能略高;[...str]更健壮,现代项目推荐优先使用 -
split()的第二个参数可限制分割次数,例如'a,b,c,d'.split(',', 2)→['a', 'b']
indexOf() 和 includes() 选哪个?
includes() 语义清晰、返回布尔值,适合判断存在性;indexOf() 返回位置索引,适合需要定位的场景。
-
includes()支持第二参数指定起始搜索位置,但不支持正则;indexOf()只接受字符串,不支持正则,且对大小写敏感 - 要忽略大小写搜索,别用
toLowerCase().includes()(创建中间字符串),改用search()配合正则:str.search(/target/i) !== -1 -
indexOf()在找不到时返回-1,常被误用于条件判断(如if (str.indexOf('x'))),但0也是真值——务必显式比较:!== -1
替换所有匹配项为什么 replace() 默认只换第一个?
因为 replace() 默认只处理第一个匹配,除非传入全局正则(带 g 标志)。传字符串不会自动全局替换。
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
立即学习“Java免费学习笔记(深入)”;
- 错误写法:
str.replace('a', 'b')→ 只换首个'a' - 正确全局替换:
str.replace(/a/g, 'b')或str.replaceAll('a', 'b')(注意:replaceAll()要求第二参数不是字符串字面量且不含捕获组,否则抛错) -
replaceAll()不支持正则(会报TypeError),想用正则必须用replace(/.../g, ...) - 若需动态构造正则,注意转义特殊字符,否则
replace(new RegExp(userInput, 'g'), ...)可能被注入恶意正则语法
字符串方法大多不修改原值,但容易在链式调用中忽略返回值;另外,substring()、substr()、slice() 行为差异微妙——尤其是负索引和越界处理,用错一个就导致静默逻辑偏差。










