前言
字符串堪称JS界的"百搭选手";------不管是做表单验证、处理用户昵称,还是玩回文小游戏,都绕不开它!今天咱不聊枯燥的概念,用一堆有趣的例子,把字符串的核心玩法扒得明明白白~
一、🔄 字符串反转:给文字来个"后空翻";
想把"干饭人"变成"人饭干"字符串反转这招必须拿捏!
基础玩法:三步搞定反转
javascript
// 目标:把"干饭人"翻成"人饭干"
const str = '干饭人';
// 1. 拆成单个字符的数组(字符串太"倔",数组才好掰扯)
const arr = str.split('');
// 2. 给数组来个乾坤大挪移
arr.reverse();
// 3. 重新拼回字符串
const reversedStr = arr.join('');
console.log(reversedStr); // 输出:人饭干 🥣
懒人版:一行装到底
不想写三步?安排!直接链式调用,主打一个简洁:
javascript
const str = '奶茶续命';
const reversedStr = str.split('').reverse().join('');
console.log(reversedStr); // 输出:命续茶奶 🧋
小知识点💡
| 方法名 | 参数含义 | 效果说明 |
|---|---|---|
split(separator, limit) |
1. separator(必填):分隔符,决定按什么拆分; 2. limit(可选):限制拆分后数组的长度,可省略。 | 返回一个新数组,原字符串不变; 示例:'干饭人'→split('')→['干','饭','人']; 示例:'奶茶,咖啡,可乐'→split(',', 2)→['奶茶','咖啡']。 |
reverse() |
无参数 | 直接修改原数组,不返回新数组; 效果是将数组元素顺序彻底反转; 示例:['干','饭','人']→reverse()→['人','饭','干'](⚠️ 原数组被修改)。 |
join(separator) |
separator(可选):拼接符,决定数组元素之间用什么连接,可省略(默认用逗号连接)。 | 返回一个拼接好的新字符串,原数组不变; 示例:['人','饭','干']→join('')→'人饭干'; 示例:['炸鸡','薯条']→join('+')→'炸鸡+薯条'。 |
二、🕵️ 回文侦探:判断字符串是不是正反都一样
回文字符串就是"正看反看都顺眼"的狠角色------比如'上海自来水来自海上'、'abba',教你两种方法揪出它们!
方法1:懒人对比法(躺平式判断)
核心思路:把字符串反转后和原串比一比,长得一样就是回文~
javascript
function isPalindrome(s) {
// 先统一小写(避免"AbBa"这种调皮鬼捣乱)
const lowerStr = s.toLowerCase();
// 反转字符串(老熟人组合拳)
const reversedStr = lowerStr.split('').reverse().join('');
// 是不是双胞胎?返回结果!
return lowerStr === reversedStr;
}
console.log(isPalindrome('上海自来水来自海上')); // true 🌊
console.log(isPalindrome('abba')); // true
方法2:双指针法(高效小能手)
不想反转整个字符串?用两个"指针小弟"从两头往中间凑,逐一核对字符,效率更高~
javascript
function isPalindrome(s) {
const lowerStr = s.toLowerCase();
let left = 0; // 左指针:从开头出发 🚶
let right = lowerStr.length - 1; // 右指针:从结尾出发 🚶♂️
while (left < right) {
// 字符不一样?直接出局!
if (lowerStr[left] !== lowerStr[right]) {
return false;
}
// 指针向中间贴贴
left++;
right--;
}
// 全员匹配!是回文~
return true;
}
// 测试一下
console.log(isPalindrome('noon')); // true ⏰
console.log(isPalindrome('螺蛳粉粉蛳螺')); // true 🥘
两种方法大比拼🥊
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 懒人对比法 | 代码短、一看就会 | 要多占点内存 | 日常小场景、短字符串 |
| 双指针法 | 省内存、速度快 | 代码稍多一丢丢 | 长字符串、追求性能 |
三、✨ 字符串超实用招式大全(高频款)
除了反转和判回文,这些招式日常开发天天用,记牢少踩坑!
1. "字符串"↔"数组"互转(必备基本功)
split(分隔符, 限制长度):把字符串拆成数组
javascript
const str = '奶茶,咖啡,可乐';
console.log(str.split(',')); // ['奶茶','咖啡','可乐'] ☕️
console.log(str.split(',', 2)); // 只拆前2个 → ['奶茶','咖啡']
join(分隔符):数组粘回字符串
javascript
const arr = ['炸鸡', '薯条', '汉堡'];
console.log(arr.join('+')); // 炸鸡+薯条+汉堡 🍔
2. 揪出指定位置的字符(精准定位)
-
charAt(下标):按位置找字符,越界返回空串 -
str[下标]:ES6懒人写法,越界返回undefined
javascript
const str = '小龙虾';
console.log(str.charAt(1)); // 龙 🦞
console.log(str[2]); // 虾
console.log(str.charAt(10)); // ''(找不到就装哑巴)
console.log(str[10]); // undefined(找不到就摊牌)
3. 字符串拼接(花式组CP)
-
`+` 运算符:最直白的拼法
-
模板字符串:ES6yyds,支持换行+变量,颜值拉满
javascript
const userName = '小明';
const food = '烤串';
// 老式拼法
console.log(userName + '爱吃' + food); // 小明爱吃烤串 🍢
// 新潮拼法(推荐!)
console.log(`${userName}
超爱吃${food}`); // 支持换行,输出更灵活

4. 字符串截取(精准切分)
slice(起始, 结束):灵活截取,支持负数(从末尾数)
javascript
const str = '草莓蛋糕好好吃';
console.log(str.slice(0, 4)); // 草莓蛋糕 🍰
console.log(str.slice(-3)); // 好好吃(取最后3个字符)
5. 查找&替换(找bug/改内容)
-
includes():判断是否包含某段字符,返回布尔值 -
replace():替换内容,加`/内容/g`全局换
javascript
const str = '今天吃火锅,明天吃火锅,天天吃火锅';
console.log(str.includes('火锅')); // true 🍲
console.log(str.replace('火锅', '烤肉')); // 今天吃烤肉,明天吃火锅,天天吃火锅
console.log(str.replace(/火锅/g, '烤肉')); // 全局替换:今天吃烤肉,明天吃烤肉,天天吃烤肉 🥩
6. 去空格+大小写(细节控必备)
-
trim():去掉首尾多余空格(填表单超常用) -
toLowerCase()/toUpperCase():大小写切换
javascript
const str = ' 我爱吃榴莲 ';
console.log(str.trim()); // 我爱吃榴莲 🥭
console.log('AbCdEf'.toLowerCase()); // abcdef
console.log('abc'.toUpperCase()); // ABC
四、🎨 实战小案例:给字符串"插个队"
想给'炸鸡配啤酒'中间加个'快乐',变成'炸鸡快乐配啤酒'
javascript
let str = '炸鸡配啤酒';
// 1. 拆成数组:['炸鸡','配啤酒']
let arr = str.split('配');
// 2. 在下标1的位置插入"快乐配"(splice:删n个+插内容)
arr.splice(1, 0, '快乐配');
// 3. 粘回字符串
str = arr.join('');
console.log(str); // 输出:炸鸡快乐配啤酒 🥳
上面案例中用到了slice的"亲戚"splice,两者经常被混淆,这里用表格彻底分清,参数、效果一次性讲透👇
| 方法名 | 参数含义 | 效果说明 | 核心区别 |
|---|---|---|---|
splice(start, deleteCount, item1, ...) |
1. start(必填):起始下标,决定从哪个位置开始操作; 2. deleteCount(必填):要删除的元素个数,填0表示不删除; 3. item1, ...(可选):要插入的元素,可插入多个,省略则只删除不插入。 | 直接修改原数组,返回被删除的元素组成的数组; | 修改原数组,可删可插,"全能选手" |
slice(start, end) |
1. start(必填):起始下标,从该位置开始截取;支持负数(从末尾数,-1表示最后一个元素); 2. end(可选):结束下标,截取到该位置(不包含end本身);省略则截取到数组/字符串末尾。 | 不修改原数组/字符串,返回截取到的新内容(数组/字符串); | 不修改原内容,只截取,"只读选手" |
javascript
const arr = [1, 2, 3, 4, 5];
// 删除 2 个元素,从索引 1 开始
const removed = arr.splice(1, 2); // removed = [2, 3]
console.log(arr); // [1, 4, 5](原数组被修改)
// 在索引 1 处插入元素,不删除
arr.splice(1, 0, 'a', 'b'); // 返回 []
console.log(arr); // [1, 'a', 'b', 4, 5]
// 替换元素:删除 1 个,并插入新元素
arr.splice(2, 1, 'x'); // 返回 ['b']
console.log(arr); // [1, 'a', 'x', 4, 5]
javascript
const arr = [1, 2, 3, 4, 5];
const newArr = arr.slice(1, 4); // [2, 3, 4](索引 1 到 3 的元素)
console.log(arr); // [1, 2, 3, 4, 5](原数组不变)
javascript
const str = "Hello World";
const newStr = str.slice(0, 5); // "Hello"
console.log(str); // "Hello World"(原字符串不变)
💡 小提醒:案例中用的是split拆分字符串,splice操作数组,而slice既能操作字符串,也能操作数组,用法完全一致哦!
五、⚠️ 避坑小提醒
- 字符串是"铁憨憨":所有修改操作都会返回新字符串,原串纹丝不动!
javascript
const str = '雪糕';
str.toUpperCase(); // 返回'雪糕',但原串还是'雪糕'
console.log(str); // 雪糕 🍦
- 下标别越界:
charAt()越界返回空串,str[]越界返回undefined,记得判断~
总结
-
🌀 字符串反转靠split('') + reverse() + join('')组合拳,简单又好用;
-
🕵️ 回文判断有两种玩法:懒人对比法(易上手)、双指针法(更高效);
-
✨ 日常高频招式:拆分/拼接、截取、查找替换、去空格,记牢能省超多事~