安全取子串用slice(),判断包含用includes(),全局替换用replaceAll()或replace(/g),拆分字符串优先用[...str]而非split("")。

JavaScript 字符串本身是原始类型,但调用方法时会自动包装为 String 对象,所以能用一堆方法——但不是所有都该常用,有些已过时,有些性能差,有些在特定场景下会出人意料。
如何安全地取子串:优先用 slice(),别碰 substr()
substr() 已被标记为废弃(MDN 明确标注 deprecated),且第二个参数是“长度”而非“结束索引”,容易和 substring() 混淆。而 slice() 支持负数索引、语义清晰、兼容性好。
-
"hello".slice(1, 4)→"ell"(左闭右开) -
"hello".slice(-3)→"llo"(从末尾倒数) -
"hello".substring(1, 4)也能得到"ell",但它会自动交换参数顺序(substring(4, 1)结果一样),有时反而掩盖逻辑错误 -
"hello".substr(1, 3)虽然结果相同,但 Chrome 控制台会警告,TypeScript 类型库也不包含它
判断是否包含子串:用 includes(),别再写 indexOf() !== -1
includes() 是 ES2015 加入的,语义直接、返回布尔值,可读性高,还支持第二个参数指定起始位置。
-
"javascript".includes("script")→true -
"abc".includes("b", 2)→false(从索引 2 开始找,跳过了"b") -
indexOf()还得加判断,多写且易错:str.indexOf("x") >= 0或!== -1都不如includes()直观 - 注意:
includes()区分大小写;如需忽略大小写,先转小写:str.toLowerCase().includes(target.toLowerCase())
替换内容时小心默认行为:replace() 只换第一个,要全局得用正则
replace() 默认只替换第一个匹配项,哪怕传入字符串字面量——这点常被忽略,导致 bug 难定位。
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
立即学习“Java免费学习笔记(深入)”;
-
"a a a".replace("a", "x")→"x a a"(不是全部) - 想全替换,必须用正则并加
g标志:"a a a".replace(/a/g, "x")→"x x x" - 如果替换内容来自变量,记得转义正则特殊字符(如
.、$、/),否则可能报错或行为异常;简单方案是用replaceAll()(ES2021+):"a.a.a".replaceAll(".", "x")→"axaxa" -
replaceAll()不支持正则捕获组,有复杂逻辑还得回退到replace()+ 正则
拆分和拼接字符串:split() 和 join() 是搭档,但空字符串拆分要留神
split("") 看似能把字符串变数组,但遇到 Unicode 组合字符(如带声调的汉字、emoji)会出问题;现代代码更推荐 [...str] 或 Array.from(str)。
-
"café".split("")→["c", "a", "f", "é"](多数情况 OK,但"??".split("")会拆成多个代理对,显示为乱码片段) -
[..."??"]→["??"](正确识别组合 emoji) -
join()没陷阱,但注意它只作用于字符串数组;若数组含数字或undefined,会自动转字符串:["a", 1, undefined].join("-")→"a-1-" -
split()的分隔符为空字符串时,ECMAScript 规定会返回空数组("".split("")→[]),不是[""],这点常被误判
真正难的不是记方法名,而是知道哪个方法在边界条件下依然可靠——比如处理用户输入的 emoji、国际化文本,或者在循环里高频调用时的性能表现。这些细节不写进文档,但一出问题就卡半天。










