字符串
String类型
String类型是字符串的对象包装类型,可以使用String构造函数来创建。
var stringObject = new String('hello world')
String对象的方法可以在所有基本的字符串值中访问到。其中,继承的valueOf()、toLocaleString()和toString()方法,都返回对象所表示的基本字符串值。
字符串方法
-
字符方法
- charAt()
var stringObj = 'hello world' stringOjb.charAt(1) // 'e'
- charCodeAt()
var stringObj = 'hello world' stringObj.charCodeAt(1) // 101
- 方括号加数字索引
var stringObj = 'hello world' stringObj[1] // 'e'
- charAt()
-
字符串操作方法
-
concat() 拼接字符串,可以接受任意多个参数
var stringValue = 'hello ' var result = stringValue.contact('world', '!') result // 'hello world!' stringValue // 'hello '
-
slice(start, end)
start:子字符串的开始位置
end:子字符串最后一个字符后面的位置
var stringValue = 'hello world' stringValue.slice(3) // 'lo world' stringValue.slice(3, 7) // 'lo w'
slice()方法会将传入的负值与字符串的长度相加
var stringValue = 'hello world' stringValue.slice(-3) // 'rld' stringValue.slice(3, -4) // 'lo w'
-
substr(start, length)
start:子字符串的开始位置
length:返回字符的个数
var stringValue = 'hello world' stringValue.substr(3) // 'lo world' stringValue.substr(3, 7) // 'lo worl'
substr()方法将负的第一个参数加上字符串的长度,而将负的第二个参数转换为0
var stringValue = 'hello world' stringValue.substr(-3) // 'rld' stringValue.substr(3, -4) // ''
-
substring(start, end)
start:子字符串的开始位置
end:子字符串最后一个字符后面的位置
var stringValue = 'hello world' stringValue.substring(3) // 'lo world' stringValue.substring(3, 7) // 'lo w'
substring()方法会把所有负值参数都转换为0
var stringValue = 'hello world' stringValue.substring(-3) // 'hello world' stringValue.substring(3, -4) // 'hel',相当于stringValue.substring(3, 0),由于这个方法会将较小的数作为开始位置,将较大的数作为结束位置,因此最终相当于调用了substring(0, 3)
-
-
字符串位置方法
-
indexOf()
-
lastIndexOf()
这两个方法都是从一个字符串中搜索给定的子字符串,然后返回子字符串的位置(如果没有找到该子字符串,则返回-1),第二个参数表示从字符串中的哪个位置开始搜索。
var stringValue = 'hello world' stringValue.indexOf('o') // 4 stringValue.lastIndexOf('o') // 7 stringValue.indexOf('o', 6) // 7 stringValue.lastIndexOf('o', 6) // 4
var stringValue = 'Lorem ipsum dolor sit amet, consectetur adipisicing elit' var positions = new Array() var pos = stringValue.indexOf('e') while(pos > -1) { positions.push(pos) pos = stringValue.indexOf('e', pos + 1) } positions // [3, 24, 32, 35, 52]
-
-
trim()方法
创建一个字符串的副本,删除前置及后缀的所有空格,然后返回结果。
var stringValue = ' hello world ' var trimmedStringValue = stringValue.trim() stringValue // ' hello world ' trimmedStringValue // 'hello world'
-
字符串大小写转换方法
- toLowerCase()、toLocaleLowerCase()
- toUpperCase()、toLocaleUpperCase()
-
字符串的模式匹配方法
-
match()
var text = 'cat, bat, sat, fat' var pattern = /.at/ var matches = text.match(pattern) matches.index // 0 matches[0] // 'cat'
-
search()
var text = 'cat, bat, sat, fat' var pos = text.search(/at/) pos // 1
-
replace()
var text = 'cat, bat, sat, fat' var result = text.replace('at', 'ond) result // 'cond, bat, sat, fat' result = text.replace(/at/g, 'ond) result // 'cond, bond, sond, fond'
-
split()
var colorText = 'red, blue, green, yellow' var colors1 = colorText.split(',') // ['red', 'blue', 'green', 'yellow'] var colors1 = colorText.split(',', 2) // ['red', 'blue']
-
-
localeCompare()方法
比较两个字符串,并返回下列值中的一个:
- 如果字符串在字母表中应该排在字符串参数之前,则返回一个负数
- 如果字符串等于字符串参数,则返回0
- 如果字符串在字母表中应该排在字符串参数之后,则返回一个正数
var stringValue = 'yellow' stringValue.localeCompare('brick') // 1 stringValue.localeCompare('yellow') // 0 stringValue.localeCompare('zoo') // -1
-
fromCharCode()方法
接收一或多个字符编码,然后将它们转换成一个字符串(不能识别大于0xFFFF的码点)。
String.fromCharCode(104, 101, 108, 111) // 'hello'
字符串新增的方法
-
String.fromCodePoint()
弥补String.fromCharCode()方法,可以识别大于0xFFFF的字符
String.fromCodePoint(0x20BB7) // "𠮷" String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y' // true
-
String.raw()
返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串
String.raw`Hi\n${2+3}!` // 实际返回 'Hi\\n5!',显示的是转义后的结果 'Hi\n5!'
-
codePointAt()
var s = '吉' s.length // 2 s.charAt(0) // '' s.charAt(1) // '' s.charCodeAt(0) // 55362 s.charCodeAt(1) // 57271
-
normalize()
用来将字符的不同表示方法统一为同样的形式(Unicode正规化)
-
includes(),startsWith(),endsWith()
- includes():返回布尔值,表示是否找到了参数字符串
- startsWith():返回布尔值,表示参数字符串是否在原字符串的头部
- endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部
let s = 'Hello world!' s.startsWith('Hello') // true s.endsWith('!') // true s.includes('0') // true
这三个方法都支持第二个参数,表示开始搜索的位置
let s = 'Hello world!' s.startsWith('world', 6) // true s.endsWith('Hello', 5) // true s.includes('Hello', 6) // false
使用第二个参数n时,endsWith的行为与其他两个方法有所不同。它针对前n个字符,而其他两个方法针对从第n个位置直到字符串结束。
-
repeat()
返回一个新字符串,表示将原字符串重复n次,如果repeat的参数是字符串,则会先转换成数字。
let s = 'x' s.repeat(3) // 'xxx' s.repeat(0) // '' s.repeat(Infinity) // RangeError: Invalid count value s.repeat(-1) // RangeError: Invalid count value
-
padStart(),padEnd()
字符串补全长度。如果某个字符串不够指定长度,会在头部或尾部补全。padStart()用于头部补全,padEnd()用于尾部补全。'xxx'.padStart(2, 'ab') // 'xxx' 'xxx'.padEnd(2, 'ab') // 'xxx' 'abc'.padStart(10, '0123456789') // '0123456abc' 'x'.padStart(4) // ' x' 'x'.padEnd(4) // 'x ' '12'.padStart(10, 'YYYY-MM-DD') // 'YYYY-MM-12' '09-12'.padStart(10, 'YYYY-MM-DD') // 'YYYY-09-12'
-
trimStart(),trimEnd()
它们的行为与trim()一致,trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格。它们返回的都是新字符串,不会修改原始字符串。
const s = ' abc ' s.trim() // 'abc' s.trimStart() // 'abc ' s.trimEnd() // ' abc'
trimLeft()是trimStart()的别名,trimRight()是trimEnd()的别名
-
matchAll()
matchAll()方法返回一个正则表达式在当前字符串的所有匹配