文章目录
字符串常用API
长度 str.length
"abc".length
console.log("abc".length) // 3
访问字符(下标 或者 charAt(i) )
const str = "abc"
console.log("abc"[2]) // 'c'
console.log("abc".charAt(2)) // 'c'
获取子串 slice…
slice(start, end)
~推荐【左闭右开】 从 start 开始,到 end(不含)
substring(start, end)【左闭右开】 从 start 开始,到 end(不含)
substr(start, length) 不推荐使用
slice 支持负数,substring 不支持负数(不推荐用 substr)
const str = "abcdef";
str.slice(1, 4); // "bcd" 左闭右开,取 [1, 4)
str.slice(-2); // "ef" 支持负数,从倒数第2个开始
- 三个方法都“最多”接收两个参数,但只传一个参数也可以
负数支持:start 和 end 都支持负数
左闭右开:[start, end),不含 end
这里以slice为例,推荐就用这个
"abcdef".slice(2); // "cdef" → 从 index 2 开始到末尾
"abcdef".slice(2, 4); // "cd"
"abcdef".slice(-2); // "ef"
"abcdef".slice(-3, -1); // "de"
查找
indexOf(str)
lastIndexOf(str)
includes(str)
startsWith(str)
endsWith(str)
indexOf(str[, fromIndex])
从前往后找第一个匹配项
返回索引或 -1
注意:包括fromIndex,注意大写
const str = "hello world";
str.indexOf("o"); // 4
str.indexOf("o", 5); // 7,从 index 5 开始找
str.indexOf("z"); // -1,找不到
lastIndexOf(str[, fromIndex])
从后往前找第一个匹配项
返回索引或 -1
注意:包括fromIndex,注意大写
const str = "hello world";
str.lastIndexOf("o"); // 7
str.lastIndexOf("o", 6); // 4,从 index 6 向前找
includes(str[, fromIndex])
判断是否包含子串(推荐用法,语义清晰)
包括 fromIndex
返回 true false
const str = "hello world";
str.includes("world"); // true
str.includes("world", 6);
str.includes("world", 7); // false,从 index 7 开始找
startsWith(str[, fromIndex])
判断字符串是否“以 str 开头”,返回true false
可以指定从哪个 index 开始判断(不是截断)
const str = "hello world";
str.startsWith("hello"); // true
str.startsWith("world"); // false
str.startsWith("world", 6); // true(从 index 6 开始看,是否以 "world" 开头)
endsWith(str[, length])
判断是否以 str 结尾
第二个参数是“把[前几个]字符当作整个字符串进行判断”
const str = "hello world";
str.endsWith("world"); // true
str.endsWith("world", 11); // true(默认是整个字符串)
str.endsWith("hello", 5); // true(判断前5个字符是否以 hello 结尾)
修改 replace
replace(旧, 新) 第一个匹配项 , 只替换第一个
replaceAll(旧, 新) 所有匹配项 , 替换全部
const str = 'a+b+c';
// 只替换第一个 +
str.replace('+', '-');
// "a-b+c"
// 全部替换(推荐 replaceAll)
str.replaceAll('+', '-');
// "a-b-c"
拆分 str.split(separator, limit);
用法1 拆成字符数组,常用于翻转/处理
let str = "abc";
str = str.split('').reverse().join(''); // 变成字符数组 用数组的翻转方法 再拼成字符串
用法2 按空格分开+数组解构 = 处理ACM输入
"hello world 2024".split(" ");
// ["hello", "world", "2024"]
拼接
-
加法
+
-
concat()
字符的编码
charCodeAt() 是字符串实例的方法,可以“在字符串上使用”
fromCharCode() 是 String 的静态方法,用于从编码值生成字符串
'a'.charCodeAt() // 97
String.fromCharCode(97) // 'a'
const str = "abc";
str.charCodeAt(0); // 97 → 'a' 的编码
str.charCodeAt(1); // 98 → 'b'
String.fromCharCode(97); // "a"
String.fromCharCode(65); // "A"
字符串的本质
JS 中的字符串是不可变的(immutable),所有的操作如 slice、replace、toUpperCase 等,都不会修改原字符串本身,而是返回一个新字符串。
- 那什么叫“字符串不可变”?
= 无法直接修改某个字符串中的某个字符,比如这样是无效的: