JS 常用字符串操作大全
在 JavaScript 中,字符串(String)是不可变的。以下方法均返回新字符串,不会修改原字符串。
一、 查找与检测 (Searching & Checking)
这组方法用于判断字符串中是否包含某些内容,或者获取其位置。
1. includes(str) (ES6 推荐)
判断是否包含子串,返回布尔值。
text
123
const str = "Hello World";
console.log(str.includes("World")); // true
console.log(str.includes("Bye")); // false
2. indexOf(str) / lastIndexOf(str)
获取子串第一次/最后一次出现的索引。如果未找到,返回 -1。
text
123
const str = "frontend";
console.log(str.indexOf("end")); // 5
console.log(str.indexOf("java")); // -1 (未找到)
3. startsWith(str) / endsWith(str)
判断字符串是否以某子串开头或结尾。常用于判断文件扩展名或 URL 协议。
text
123
const file = "image.png";
console.log(file.endsWith(".png")); // true
console.log(file.startsWith("http")); // false
二、 截取与切片 (Slicing)
面试中常考 slice 和 substring 的区别,建议首选 slice。
1. slice(start, end) (推荐)
提取字符串的一部分。
start: 开始索引。end: 结束索引(不包含该位置)。- 特点:支持负数索引(代表从后往前数)。
text
123
const str = "JavaScript";
console.log(str.slice(0, 4)); // "Java"
console.log(str.slice(-6)); // "Script" (从倒数第6个取到最后)
2. substring(start, end)
功能与 slice 类似,但不支持负数(负数会被当作 0)。
text
12
const str = "JavaScript";
console.log(str.substring(0, 4)); // "Java"
三、 转换与替换 (Transform & Replace)
1. split(separator) (转数组 - 核心)
将字符串拆分为数组。这是字符串处理中最强大的方法之一。
text
123456
const str = "apple,banana,orange";
const arr = str.split(",");
console.log(arr); // ["apple", "banana", "orange"]
// 常见技巧:反转字符串
const reverse = "abc".split("").reverse().join(""); // "cba"
2. replace(searchValue, newValue) / replaceAll()
replace: 默认只替换第一个匹配项(除非使用带全局标志g的正则)。replaceAll(ES2021): 替换所有匹配项。
text
12345678910
const str = "hello world, hello js";
// 只替换第一个
console.log(str.replace("hello", "hi")); // "hi world, hello js"
// 替换所有 (ES2021)
console.log(str.replaceAll("hello", "hi")); // "hi world, hi js"
// 使用正则替换所有
console.log(str.replace(/hello/g, "hi")); // "hi world, hi js"
3. toLowerCase() / toUpperCase()
大小写转换。常用于搜索功能中忽略大小写的比对。
text
12
const input = "React";
console.log(input.toLowerCase() === "react"); // true
4. trim() / trimStart() / trimEnd()
去除空白字符(空格、换行、Tab)。常用于处理表单输入。
text
12
const user = " admin ";
console.log(user.trim()); // "admin"
四、 现代实用功能 (ES6+)
1. 模版字符串 (Template Literals)
使用反引号 ```,支持变量插入和多行文本。强烈推荐代替 + 号拼接。
text
12345678
const name = "Mike";
const age = 25;
// 旧写法
const oldStr = "My name is " + name + " and I am " + age;
// 新写法 (推荐)
const newStr = `My name is ${name} and I am ${age}`;
2. padStart(targetLength, padString) / padEnd()
用于补全字符串长度。常用于时间格式化或脱敏显示。
text
12345678
// 时间补零
const hour = "5";
console.log(hour.padStart(2, "0")); // "05"
// 手机号脱敏
const phone = "13812345678";
const last4 = phone.slice(-4);
console.log(last4.padStart(11, "*")); // "*******5678"
五、 总结:高频场景速查表
| 场景 | 推荐方法 | 备注 |
|---|---|---|
| 搜索关键字 | includes() | 返回 true/false |
| 获取位置 | indexOf() | 没找到返回 -1 |
| 字符串截取 | slice() | 支持负数,最灵活 |
| 转为数组 | split() | 配合数组方法处理复杂逻辑 |
| 拼接字符串 | ${var} | 模版字符串 |
| 表单去空格 | trim() | 处理用户输入 |
| 替换内容 | replaceAll() | 或使用正则 /g |