廖亚军的个人博客

Logo

苟日新,日日新,又日新

trim() / trimStart() / trimEnd()

场景 代码 说明
清理用户输入 const input = ' hello '.trim(); // "hello" 移除字符串首尾的所有空白字符
仅移除开头 str.trimStart()str.trimLeft() ES2019 新增,移除开头空白
仅移除结尾 str.trimEnd()str.trimRight() ES2019 新增,移除结尾空白
注意问题 说明
不会修改原字符串 trim() 返回新字符串,原字符串不变
空白字符范围 包括空格、Tab、换行、回车及其他 Unicode 空白字符

includes() / indexOf()

场景 代码 说明
判断包含 "hello".includes("ell") // true" ES2015 新增,返回布尔值
查找位置 "hello".indexOf("e") // 0" 返回第一次出现的索引
指定位置查找 str.includes("o", 3) 从指定索引开始查找
模糊判断 str.indexOf("xyz") === -1 未找到返回 -1
注意问题 说明
includes 不支持正则 只能传字符串,不支持正则表达式
indexOf 性能更好 简单场景 indexOf 通常更快
大小写敏感 两者都区分大小写

startsWith() / endsWith()

场景 代码 说明
判断开头 "hello".startsWith("he") // true" ES2015 新增
判断结尾 "hello".endsWith("lo") // true" ES2015 新增
指定长度匹配 str.startsWith("he", 0) 可以指定开始位置
注意问题 说明
精确匹配 必须完全匹配指定字符串
大小写敏感 区分大小写

replace() / replaceAll()

场景 代码 说明
单次替换 "hello world".replace("l", "L") // "heLlo worLd" 只替换第一个匹配
全局替换 str.replace(/l/g, "L") // "heLLo woLLd" 使用正则 + 全局标志
全部替换 "aaa".replaceAll("a", "b") // "bbb" ES2021 新增
函数替换 str.replace(/(\w+)/g, "$1X") 支持回调函数
注意问题 说明
replaceAll 需要正则 必须用全局正则或字符串
replace 不区分正则 字符串作为第一个参数时不会转正则
不修改原字符串 返回新字符串

split()

场景 代码 说明
按字符拆分 "hello".split("") // ["h","e","l","l","o"]" 分割为字符数组
按分隔符拆分 "a,b,c".split(",") // ["a","b","c"]" 按指定分隔符
按正则拆分 str.split(/[.,]/) 按正则表达式分割
限制数量 "a,b,c".split(",", 2) // ["a","b"]" 限制返回数组长度
注意问题 说明
空字符串处理 分隔符为空时,每个字符单独为数组元素
返回数组 总是返回数组,不是字符串
场景 代码 说明
匹配正则 "hello".match(/l/) // ["l", index: 2] 返回匹配详情
全局匹配 "hello".match(/l/g) // ["l", "l"] 返回所有匹配
查找位置 "hello".search(/e/) // 1 返回第一次匹配位置
正则对象 const re = /h/; str.match(re) 支持 RegExp 对象
注意问题 说明
match 需要正则 只能传正则表达式
search 返回索引 返回数字索引或 -1
大小写敏感 默认区分大小写

toLowerCase() / toUpperCase()

场景 代码 说明
转小写 "HELLO".toLowerCase() // "hello" 标准方法
转大写 "hello".toUpperCase() // "HELLO" 标准方法
地区特定小写 "Türkiye".toLocaleLowerCase("tr") // "türkiye" 遵循地区规则
地区特定大写 str.toLocaleUpperCase("zh") 遵循地区规则
注意问题 说明
土耳其语问题 土耳其语中 I 转大写是 İ 不是 I
地区特定方法优先 不确定语言时用 toLocale 系列

padStart() / padEnd()

场景 代码 说明
补零格式化 1.toString().padStart(2, "0") // "01" 数字转两位
时间格式化 min.padStart(2, "0") 分钟补零
填充开头 "abc".padStart(5, "-") // "--abc" 自定义填充字符
填充结尾 "abc".padEnd(5, "-") // "abc--" 结尾填充
注意问题 说明
长度不够返回原串 目标长度小于等于原长度时不变
可重复填充 填充字符串会重复使用

concat()

场景 代码 说明
字符串拼接 str1.concat(str2) // "ab" 拼接两个字符串
多串拼接 a.concat(b, c, d) 可接多个参数
混合类型 a.concat(123) // "123" 非字符串会自动转换
注意问题 说明
模板字符串优先 现代开发更推荐 ${a}${b}
返回新串 不修改原字符串

substring() / slice()

场景 代码 说明
截取子串 "hello".substring(1, 4) // "ell" 不包含结束索引
负数处理 str.substring(-1) // 当作 0 负数视为 0
类似数组 "hello".slice(1, 4) // "ell" 负数表示倒数位置
简单截取 str.slice(0, 3) // "hel" slice 更灵活
注意问题 说明
substring 不支持负数 负数会被当作 0
slice 支持负数 slice 更推荐用于截取
不包含结束位 都不包含结束索引

at()

场景 代码 说明
正向索引 "hello".at(0) // "h" ES2022 新增
负向索引 "hello".at(-1) // "o" 支持负索引取倒数
数组替代 str.at(-n) 类似数组访问
注意问题 说明
索引越界返回 undefined 不抛出错误
较新版本 需较新浏览器支持

charCodeAt() / codePointAt()

场景 代码 说明
获取编码 "A".charCodeAt(0) // 65" 返回 Unicode 编码
获取高位代理 "😊".charCodeAt(0) // 55357" 代理对高位部分
完整编码 "😊".codePointAt(0) // 128522" 支持完整 Unicode
反向转换 String.fromCharCode(65) // "A" 编码转字符
注意问题 说明
charCode 只处理 BMP 代理对需要两个调用
codePointAt 更可靠 处理 emoji 等完整字符

normalize()

场景 代码 说明
统一字符 "é".normalize("NFC") 组合字符标准化
分解字符 "é".normalize("NFD") 分解组合字符
大小写敏感 "É".normalize("NFKC") 兼容组合转换
注意问题 说明
四种模式 NFC/NFD/NFKC/NFKD
默认 NFC 不传参数默认 NFC

toWellFormed() / isWellFormed() (ES2024)

场景 代码 说明
检查有效性 str.isWellFormed() ES2024 新增,检查代理对
转为有效 str.toWellFormed() 替换无效代理为替换字符
注意问题 说明
较新特性 需较新浏览器支持
代理对处理 专门处理 Unicode 代理对

repeat()

场景 代码 说明
重复字符 "*".repeat(5) // "*****" 重复字符串
填充线 "=".repeat(20) 创建分隔线
表格线 "─".repeat(50) 表格边界
注意问题 说明
次数必须非负 负数返回空串
0 次返回空串 repeat(0) 返回 “”

localeCompare()

场景 代码 说明
字典排序 "apple".localeCompare("banana") // -1" 返回排序结果
地区特定 str.localeCompare("中", "zh-CN") 按地区规则排序
数组排序 arr.sort((a,b)=>a.localeCompare(b)) 字符串数组排序
注意问题 说明
返回数字 -1/0/1 表示小于/等于/大于
地区影响 不同地区排序规则不同