Appearance
JavaScript字符串方法完全指南
前言
字符串(String)是JavaScript中最常用的数据类型之一。JavaScript提供了丰富的字符串操作方法,掌握这些方法对于日常开发非常重要。本文将系统地介绍JavaScript中的字符串方法。
一、字符串的特点
- 不可变性: 字符串是不可变的,所有字符串方法都不会改变原字符串
- 基本包装类型: 可以使用String对象的方法
- 索引访问: 可以通过索引访问单个字符
javascript
let str = "Hello";
str[0]; // "H"
str.charAt(0); // "H"
// 字符串不可变性示例
str[0] = "h"; // 无效
console.log(str); // 仍然是 "Hello"
二、常用方法分类
1. 查找类方法
1.1 indexOf() 和 lastIndexOf()
javascript
const str = "Hello World";
str.indexOf("o"); // 4
str.lastIndexOf("o"); // 7
str.indexOf("z"); // -1 (未找到)
// 实用技巧:检查子串是否存在
if (str.indexOf("World") !== -1) {
console.log("包含World");
}
1.2 includes(), startsWith(), endsWith()
javascript
const str = "Hello World";
str.includes("World"); // true
str.startsWith("Hello"); // true
str.endsWith("World"); // true
// 带位置参数的使用
str.startsWith("World", 6); // true
str.endsWith("Hello", 5); // true
1.3 charAt() 和 charCodeAt()
javascript
const str = "Hello";
str.charAt(0); // "H"
str.charCodeAt(0); // 72 (H的Unicode值)
// 获取最后一个字符
str.charAt(str.length - 1); // "o"
2. 转换类方法
2.1 大小写转换
javascript
const str = "Hello World";
str.toLowerCase(); // "hello world"
str.toUpperCase(); // "HELLO WORLD"
// 实用场景:不区分大小写的比较
const compare = (str1, str2) => {
return str1.toLowerCase() === str2.toLowerCase();
};
2.2 去除空格
javascript
const str = " Hello World ";
str.trim(); // "Hello World"
str.trimLeft(); // "Hello World "
str.trimRight(); // " Hello World"
// 自定义去除所有空格
const removeAllSpaces = str => str.replace(/\s/g, '');
3. 截取和拼接
3.1 slice(), substring(), substr()
javascript
const str = "Hello World";
str.slice(6); // "World"
str.slice(0, 5); // "Hello"
str.slice(-5); // "World"
str.substring(6); // "World"
str.substring(0, 5);// "Hello"
str.substr(6, 5); // "World"
// 实用技巧:获取最后N个字符
const getLastChars = (str, n) => str.slice(-n);
3.2 concat() 和 模板字符串
javascript
const str1 = "Hello";
const str2 = "World";
// concat方法
str1.concat(" ", str2); // "Hello World"
// 模板字符串(推荐)
const name = "张三";
const greeting = `你好,${name}!`; // "你好,张三!"
4. 正则相关方法
4.1 match() 和 matchAll()
javascript
const str = "Hello 2021, Hello 2022";
// 使用match
const matches = str.match(/Hello/g);
console.log(matches); // ["Hello", "Hello"]
// 使用matchAll (ES2020)
const matchesIterator = str.matchAll(/Hello/g);
for (const match of matchesIterator) {
console.log(match);
}
4.2 replace() 和 replaceAll()
javascript
const str = "Hello World";
str.replace("World", "JavaScript"); // "Hello JavaScript"
// 使用正则替换所有匹配
const str2 = "hello hello hello";
str2.replace(/hello/g, "hi"); // "hi hi hi"
// replaceAll (ES2021)
str2.replaceAll("hello", "hi"); // "hi hi hi"
// 使用函数作为替换值
const str3 = "cat, bat, sat, fat";
str3.replace(/[a-zA-Z]+/g, str => str.toUpperCase());
// "CAT, BAT, SAT, FAT"
三、实用场景示例
1. URL参数解析
javascript
function getQueryParams(url) {
const params = {};
const queryString = url.split('?')[1];
if (!queryString) return params;
queryString.split('&').forEach(param => {
const [key, value] = param.split('=');
params[key] = decodeURIComponent(value);
});
return params;
}
// 使用示例
const url = "https://example.com?name=张三&age=20";
console.log(getQueryParams(url)); // { name: "张三", age: "20" }
2. 字符串模板引擎
javascript
function template(str, data) {
return str.replace(/\${(\w+)}/g, (match, key) => {
return data[key] || '';
});
}
// 使用示例
const template1 = "你好,${name}!今年${age}岁了。";
const data = { name: "张三", age: 20 };
console.log(template(template1, data));
// "你好,张三!今年20岁了。"
3. 格式化处理
javascript
// 数字千分位格式化
function formatNumber(num) {
return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
}
// 手机号格式化
function formatPhone(phone) {
return phone.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3');
}
console.log(formatNumber(1234567890)); // "1,234,567,890"
console.log(formatPhone('13812345678')); // "138-1234-5678"
四、面试常见问题
1. slice、substring和substr的区别?
javascript
/*
1. slice(start, end):
- 支持负数索引
- end表示结束位置(不包含)
2. substring(start, end):
- 不支持负数索引
- 会自动调整参数顺序
3. substr(start, length):
- 支持负数索引
- 第二个参数表示长度
*/
const str = "Hello World";
console.log(str.slice(-5)); // "World"
console.log(str.substring(-5)); // "Hello World"
console.log(str.substr(-5, 3)); // "Wor"
2. 实现一个字符串反转函数
javascript
// 方法1:使用数组
function reverse1(str) {
return str.split('').reverse().join('');
}
// 方法2:使用for循环
function reverse2(str) {
let result = '';
for (let i = str.length - 1; i >= 0; i--) {
result += str[i];
}
return result;
}
// 方法3:使用递归
function reverse3(str) {
return str.length <= 1 ? str : reverse3(str.slice(1)) + str[0];
}
五、最佳实践建议
- 优先使用新的ES6+方法
- 注意字符串的不可变性
- 合理使用正则表达式
- 考虑性能影响
- 注意编码问题
总结
JavaScript字符串方法丰富且强大,合理使用这些方法可以大大提高开发效率。在实际开发中,建议:
- 熟练掌握常用方法
- 理解方法的特点和使用场景
- 注意性能优化
- 保持代码的可读性和维护性
希望本文能帮助你更好地理解和使用JavaScript字符串方法!