JavaScript字符串操作总结

获取字符串长度

str.length

返回数字

1
2
str = "abc"
str.length // 3

length为属性值,后面不加括号

获取字符串指定位置的字符

str[index]

  • 返回字符串
  • 必须有索引值,超出范围返回undefined
1
2
3
4
str = "abc"
str[0] // a
str[-1] // undefined
str[100] // undefined

str.charAt(index)

  • 返回字符串
  • 索引值默认为0,超出范围返回空字符串""
1
2
3
4
str = "abc"
str.charAt() // a
str.charAt(-1) // ""
str.charAt(100) // ""

str.charCodeAt(index)

  • 返回索引位置字符的Unicode编码
  • 索引值默认为0
  • 超出范围返回NaN(空字符,无对应)
1
2
3
str = "abc"
str.charCodeAt() // 97
str.charCodeAt(-1) // NaN

检索字符串是否包含特定序列

indexOf(searchValue,start)

  • 返回数字
  • 不给参数,返回-1;
  • 参数为"",返回0;
  • 设置参数,返回对应索引/-1;
  • 参数字符串长度>1,只认第一个字符
  • start当做索引截取字符串,之后再判断
1
2
3
4
5
6
7
str = "abc"
str.indexOf() // -1
str.indexOf("") // 0
str.indexOf("c") // 2
str.indexOf("d") // -1
str.indexOf("bcd") // 1
str.indexOf("bcd",2) // -1

lastIndexOf(searchValue,position)

  • 返回数字
  • 不给参数,返回-1;
  • 参数为"",返回字符串长度;
  • 设置参数,返回最后一个相同字符对应索引/-1;
  • 参数字符串长度>1,只认第一个字符
  • position截取的是 [0,position]
1
2
3
4
5
6
str = "abca"
str.lastIndexOf() // -1
str.lastIndexOf("") // 4
str.lastIndexOf("a") // 4
str.lastIndexOf("bc") // 1
str.lastIndexOf("bc",2) // "abc"<-->"b" 1

includes(searchValue,start)

  • 返回Boolean
  • 对字符串从start截取[start,];
  • 从截取出的字符串中查找是否包含要找的字符串,返回true/false;
  • start默认为0,start<0?0:start
1
2
3
4
5
6
str = "abcde"
str.includes("ab") // "abcde"-->"ab" true
str.includes("ab",0) // "abcde"-->"ab" true
str.includes("ab",1) // "bcde"-->"ab" false
str.includes("ab",-100) // "abcde"-->"ab" true
str.includes("ab",100) // ""-->"ab" false

startsWith(searchValue,start)

  • 返回Boolean
  • 检测字符串是否以指定的子字符串开始。
  • 如果是以指定的子字符串开头返回 true,否则 false。
  • 其语法和上面的includes()方法一样。
1
2
3
4
5
6
7
8
9
str = "abcde"
str.startsWith("a"); // true
str.startsWith("A"); // false
str.startsWith("bc"); // false
str.startsWith("a",-1); // true
str.startsWith("bc",-1); // false
str.startsWith("bc",1); // true
str.startsWith("",3); // true
str.startsWith(); //false

endsWith(searchValue,position)

  • 返回Boolean
  • 先返回字符串的 [0,position)
  • 检测字符串是否以指定的子字符串结尾。
  • 返回true/false
1
2
3
4
5
str = "abcde"
str.endsWith("e"); // true
str.endsWith("e",5); // true
str.endsWith("e",4); // false
str.endsWith("e",-1); // 截取出"",没有"e",false

连接多个字符串

string.concat(string1, string2, ..., stringX)

返回字符串

数组也有相同的方法(返回数组)

1
2
3
4
5
6
str = "abc"
str_1 = "de"
str_2 = "f"
str.concat(str_1,str_2) // abcdef
str.concat(...str_1) // abcde
str.concat(...str_1,str_2) // abcdef

字符串分割为数组

string.split(separator,limit)

  • separator:字符串或正则表达式
  • limit:分割后,数组的最大长度
1
2
3
str = "apples,bananas;cherries"
str.split("a") // ['', 'pples,b', 'n', 'n', 's;cherries']
str.split(/[,;]/) // ["apples", "bananas", "cherries"]

截取字符串

slice(start,end)

  • 返回[start,end)范围的字符串
  • start、end均可以为负数,负数从尾部计算
1
2
3
4
5
str = "abcde"
str.slice() // abcde
str.slice(0,2) // abc
str.slice(-1) // e
str.slice(-5,-2) // abc

substr(start,length)

  • 返回[start开始的length长度的字符串
  • start为负数,从尾部计算
1
2
3
4
5
6
str = "abcde"
str.substr() // abcde
str.substr(1) // bcde
str.substr(1,2) // bc
str.substr(-5,2) // ab
str.substr(-5,-1) // ""

substring(start,end)

  • 返回[start,end)字符串
  • start为负数,从尾部计算,end不能为负数
1
2
3
4
5
str = "abcde"
str.substring() // abcde
str.substring(1,3) // bc
str.substring(-5,3) // abc
str.substring(-5,-1) // ""
  • slice和substring基本相同,但substring的end不能为负数
  • substr通过length确定截取长度

大小写转换

toUpperCase(str)

将str中字符转换为大写

toLowerCase(str)

将str中字符转换为小写

1
2
3
str = "Abcde"
str.toLowerCase() // abcde
str.toUpperCase() // ABCDE

字符串模式匹配

replace(searchValue,replacement)

  • searchValue可以是字符串或者正则表达式
  • replacement可以是字符串或函数
1
2
3
4
str = "AbcdeA"
str.replace("A","a") // abcdeA
str.replace(/A/,word=>word.toLowerCase()) // abcdeA
str.replace(/A/g,word=>word.toLowerCase()) // abcdea

replacement中的其他用法参考:JavaScript replace() 方法

match(searchValue/regexp)

  • 匹配字符串或正则表达式
  • 若匹配到一个相关文本,返回数组带有该文本及原字符串相关信息
  • 若匹配到多个字符,返回匹配到的字符组成的数组
1
2
3
4
str = "AbcdeA"
str.match("A") // ['A', index: 0, input: 'AbcdeA', groups: undefined]
str.replace(/A/) // ['A', index: 0, input: 'AbcdeA', groups: undefined]
str.replace(/A/) // ['A', 'A']

search(searchValue/regexp)

  • 返回匹配到的字符在原字符串的起始位置索引
  • 正则全局匹配不生效(无法匹配多个)
1
2
3
4
5
6
str = "AbcdeA"
str.search("A") // 0
str.search(/A/) // 0
str.search(/A/g) // 0
str.search() // 0
str.search("") // 0

移除首尾空白符

trim()

  • 移除首尾空白符
  • 返回移除后的字符穿
1
2
str = " abc "
str.trim() // "abc"

trimStart()

  • 同trim()
  • 仅移除字符串首部空白符
1
2
str = " abc "
str.trimStart() // "abc "

trimEnd()

  • 同trim()
  • 仅移除字符串末尾空白符
1
2
str = " abc "
str.trimEnd() // " abc"

获取字符串本身

用来将其他对象转化为字符串

valueOf()

具体使用及转化情况见:Object.prototype.valueOf()

toString()

具体使用及转化情况见:Object.prototype.toString()

重复字符串

repeat(count)

  • count为小数时,向下取整
  • count为0时,返回""
  • count为负数/Infinity,报错
  • count为NaN,等同于0
  • count为字符串时,先转化为数字–>数字/NaN
1
2
3
4
5
6
7
str = "abc "
str.repeat() // ""
str.repeat(1) // "abc"
str.repeat(2.8) // "abcabc"
str.repeat("2") // "abcabc"
str.repeat("a") // ""
str.repeat(-1) // RangeError

补齐字符串长度

padStart(targetLength, padString)

  • 头部补全

padEnd(targetLength, padString)

  • 尾部补全
1
2
3
str = "abc "
str.padStart(4,"A") // Aabc
str.padEnd(4,"A") // abcA

字符串转数字

parseInt(string, radix)

  • 认为string以radix为进制,将其转换为10进制表示
  • 若字符串第一个字符不是数字,返回NaN
  • 遇到string中第一个不是数字的字符后返回
  • radix默认为10
  • 当string以0x或0X开头,radix默认16
  • radix范围:2-36 (0-9+26字母=36),超出范围返回NaN
1
2
3
4
5
parseInt("a100") // NaN
parseInt("100a") // 100
parseInt("100 a") // 100
parseInt("100",3) // 9 = 1*3^2+0*3^1+0*3^0
parseInt("0x10") // 16 = 1*16^1+0*16^0

parseFloat(string)

将string转换为10进制浮点数

  • 如果 parseFloat 在解析过程中遇到了正号(+)、负号(-U+002D HYPHEN-MINUS)、数字(0-9)、小数点(.)、或者科学记数法中的指数(e 或 E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数
  • 第二个小数点的出现也会使解析停止(在这之前的字符都会被解析)
  • 参数首位和末位的空白符会被忽略
  • 如果参数字符串的第一个字符不能被解析成为数字,则返回 NaN
  • parseFloat 也可以解析并返回 Infinity
  • parseFloat 解析 BigInt 为 Numbers, 丢失精度。因为末位 n 字符被丢弃
1
2
3
4
5
6
7
parseFloat(3.14); // 3.14
parseFloat('3.14'); // 3.14
parseFloat(' 3.14 '); // 3.14
parseFloat('314e-2'); // 3.14
parseFloat('0.0314E+2'); // 3.14
parseFloat('3.14some non-digit characters'); // 3.14
parseFloat({ toString: function() { return "3.14" } });

更多内容见:parseFloat


参考资料:

最全的js 字符串操作方法_难瘦丶的博客-CSDN博客_js字符串操作方法

JavaScript | MDN (mozilla.org)

JavaScript 教程 (w3school.com.cn)