字符串方法
String类型为基本类型
,对其的增删改查都不改变原字符串
,返回一个新字符串再进行操作
1.提取
substring
(index1,index2) substr
(start,length) slice
(start,end) split
(str)
substring(index1,index2)
let s = "Hello World"
s.substring() //Hello World
s.substring(5) // World
s.substring(3, -5) //Hel
没有参数
:返回原字符串一个参数
:作为起始下标,结束默认为字符串长度两个参数
:自动比较
区分起始与结束负数
:忽略或按索引0处理- 提取的字符串
包头不包尾
substr(start,length)
let s = "Hello World"
s.substr(3,1) //l
s.substr(-3, 2) //rl
0个参数
:与substring功能一样1个参数
:支持负数为起始索引两个参数
:第一个为起始,第二个为长度负数
:start
支持负数,-1为最后一个字符,length为负数时返回空字符串
slice(start,end)
let s = "Hello World"
s.slice(3, -6) //lo
0、1个参数
与substr相同两个参数
:start与end均支持负数
,但end的位置不能在start前,否则返回空字符串
split(str)
let s = "Hello World"
s.split() //["Hello World"]
s.split('l') //["He","","o Wor","d"]
- 将字符串转化为
数组
- 以子串或空字符串为
分隔
,划分为多个子串,将这些子串放入数组,并返回该数组
2.搜索
indexOf
(str,start) lastIndexOf
(str,start) startsWinth
(str) endsWith
(str) includes
(str)charAt
(index) charCodeAt
(index) codePointAt
(index)
indexOf(str,start)
let s = "Hello World"
s.indexOf() //-1
s.indexOf("l") //2
s.indexOf("l", 6) //9
- 无参数或者不存在子串,返回
-1
两个参数
:start为负数
时忽略或默认为0,空字符串
返回start
lastIndexOf(str,start)
let s = "Hello World"
s.lastIndexOf("l") //9
s.lastIndexOf("l", 4) //3
- 反向检索,返回第一个匹配的下标
- 负数基本无法使用
startsWith(str) endsWith(str)
let s = "Hello World"
s.startsWith() //false
s.startsWith("") //true
s.startsWith("H") //true
- 检测是否以某子串开头或结尾,返回true/false
空字符串
返回true
includes(str)
let s = "Hello World"
s.includes() //false
s.includes("") //true
s.includes("ll") //true
- 检测是否包含子串,返回true/false
- 空字符串返回true
charAt(index)
let s = "Hello World"
s.charAt() //H
s.charAt(0) //H
- 检索字符串中某下标下的字符
- 默认为0,负数或者超出长度返回空字符串
charCodeAt(index) codePointAt(index)
let s1 = "Hello World"
s1.charCodeAt() //72
s1.charCodeAt(0) //72
let s2 = "𠮷"
s.charCodeAt() //55362
s.codePointAt()//134071
- 返回指定位置的字符的
Unicode
编码 - 默认为0,负数或超出返回
NaN
- charCodeAt返回0 - 65535 两个字节
- codePointAt能返回四个字节的码点
3.修改
replace
(str1,str2) toLowerCase
() toUpperCase
() trim
() trimStart
() trimEnd
() padStart
(length,str) padEnd
(length,str)normalize
("NFC/NFD/NFKC/NFKD")
replace(str1,str2)
let s = "Hello World"
s.replace() //Hello World
s.replace("World", "JS") //Hello JS
- 将字符串中的子串替换为其他字符串
- str1不是原字符串的子串时,返回原字符串
toLowerCase() toUpperCase()
let s = "Hello World"
s.toLowerCase() //hello world
s.toUpperCase() //HELLO WORLD
- 切换大小写
trim() trimStart() trimEnd()
let s = " Hello World "
s.trim() //"Hello World"
s.trimStart()//"Hello World "
s.trimEnd() //" Hello World"
- 删除两侧空格
padStart(length,str) padEnd(length,str)
let s = "Hello World"
s.padStart() //Hello World
s.padStart(s.length,"*") //Hello World
s.padStart(s.length+2,"*") //**Hello World
- 在字符串的开头或结尾填充字符串以达到指定长度
- 指定长度需要大于原字符串长度
- 当填充字符串过长,其长度与原字符串长度加和大于指定长度,则只填充一部分
normalize("NFC/NFD/NFKC/NFKD")
let s = "\u00F1"
s.normalize() //ñ
- 按照指定的一种 Unicode 正规形式将当前字符串正规化,默认为NFC
4.拼接
concat
(str) repeat
(times)
concat(str)
let s = "Hello World"
let arr = ["1", "2"]
console.log(s.concat(arr)); //Hello World1,2
- 将str拼接到s上,如果str不是字符串先转换成字符串再拼接
repeat(times)
let s = "Hello World"
s.repeat() //""
s.repeat(2)//Hello WorldHello World
- 无参数或参数为0返回空字符串
- times为小数时,向下取整
5.String的静态方法
String.fromCharCode()
String.fromCodePonint()
String.raw()
String.fromCharCode(num1,...) 和 String.fromCodePoint(num1,...)
let num1 = 0x00BB7
let num2 = 0x20BB7
console.log(String.fromCharCode(num1, num2));//ஷஷ
console.log(String.fromCodePoint(num1, num2));//ஷ𠮷
- 这两个方法都是将多个数值转化为一个字符串
- fromCharCode识别区间为0-65535(
0xFFFF
),超过会将最高位
忽略,16位两个字节 - fromCodePoint可以识别32位
4个字节
的数值
String.raw(callSite,...substitutions) String.raw'templateString'
let name = "张三"
String.raw({ raw: 'test' }, 0, name)//t0e张三st
//等价于 `t${0}e${name}st`
String.raw({ raw: ["foo", "bar", "baz"] }, 1 + 1, name)
//foo2bar张三baz
let tmpl = `\u0BB7${name}`
console.log(tmpl);//ஷ张三
String.raw`\u0BB7${name}`//\u0BB7张三
String.raw`{tmpl}`//ஷ张三
- raw作为回调函数可以实现模板字符串的功能
- 但是要确保回调对象的长度
大于
模板参数的数量 - raw直接加模板字符串会忽略
转义字符
,返回原字符串