JavaScript字符串不可变,所有方法均返回新字符串;需注意slice/substring/substr参数差异、replace默认不全局、substr已废弃、全角空格trim无效等高频坑点。

JavaScript 字符串是不可变的原始类型,所有“修改”操作实际都返回新字符串——这是理解所有方法行为的前提。
获取字符和子串:charAt()、charCodeAt()、slice()、substring()、substr()
这些方法用于提取内容,但参数逻辑差异大,容易混用:
-
slice(start, end)支持负数索引(从末尾计),end不包含;超出范围不报错,返回空字符串或截断结果 -
substring(start, end)会自动交换大小顺序(substring(3,1) === substring(1,3)),且不支持负数 -
substr(start, length)已被废弃,length是要取的字符数,不是结束位置;现代代码应避免使用 -
charAt(index)返回单字符字符串,越界时返回空字符串;charCodeAt(index)返回 Unicode 编码值,越界返回NaN
const str = "hello"; str.slice(1, 3); // "el" str.substring(3, 1); // "el"(自动调换) str.charAt(-1); // ""(不支持负索引) str.at(-1); // "o"(ES2022 新增,推荐替代 charAt)
查找与判断:includes()、indexOf()、startsWith()、endsWith()
这些方法返回布尔值或索引,注意它们对大小写敏感,且不支持正则(除 search() 外):
-
includes(searchStr, fromIndex)最直观,返回true/false -
indexOf(searchStr, fromIndex)返回首次匹配索引,未找到返回-1;适合需要定位场景 -
startsWith(searchStr, position)和endsWith(searchStr, length)的第二个参数含义不同:前者是检查起始位置,后者是检查前多少个字符 - 如需忽略大小写,先转成统一大小写再查,不要依赖正则(除非真需要模式匹配)
const str = "Hello World";
str.includes("world"); // false
str.toLowerCase().includes("world"); // true
str.startsWith("He"); // true
str.endsWith("ld", 8); // true(只检查前 8 个字符:"Hello Wo")
替换与分割:replace()、replaceAll()、split()
字符串替换默认只换第一个匹配项,这点常被忽略:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
立即学习“Java免费学习笔记(深入)”;
-
replace(searchValue, replaceValue)中searchValue可以是字符串或正则;若为字符串,仅替换首处 -
replaceAll(searchValue, replaceValue)要求searchValue不能是普通字符串(除非启用了global标志的正则),否则抛出TypeError -
split(separator, limit)的separator为空字符串时,会把每个字符拆成数组;limit控制最多拆出几项
const str = "a-b-c-d";
str.replace("-", "+"); // "a+b-c-d"(只换第一个)
str.replaceAll("-", "+"); // "a+b+c+d"(ES2021+)
str.replaceAll(/-/g, "+"); // 等效写法(兼容旧环境)
str.split("", 3); // ["a", "-", "b"]
大小写与空白处理:toLowerCase()、trim() 及其变体
看似简单,但涉及国际化和 Unicode 边界问题:
-
toLowerCase()和toUpperCase()在土耳其语等语言中可能出错;如需准确本地化转换,用toLocaleLowerCase(locale) -
trim()只去除首尾空白(U+0020、\t、\n、\r 等);trimStart()和trimEnd()更精准控制 -
trim()对全角空格(如中文空格 U+3000)无效,需手动处理或用正则
const str = " \t\n hello world \u3000 "; str.trim(); // "hello world "(全角空格还在) str.replace(/^[\s\u3000]+|[\s\u3000]+$/g, ""); // 手动清除含全角空格
字符串方法大多返回新值而非修改原串,链式调用安全;但要注意 replace() 默认不全局、substr() 已废弃、全角空白需额外处理——这些是线上 bug 的高频来源。








