1.String.fromCodePoint()
用于从 Unicode 码点返回对应字符,与String.fromCharCode()方法用法类似,
不同的是String.fromCodePoint()能识别码点大于0xFFFF的字符。
上面代码中,如果String.fromCodePoint方法有多个参数,则它们会被合并成一个字符串返回。
console.log(String.fromCodePoint(0x20BB7))
// "𠮷"
console.log(String.fromCodePoint(0x78, 0x1f680, 0x79))
// "x🚀y"
2.String.raw()
String.raw() 是一个模板字符串的标签函数,用来获取一个模板字符串的原始字符串
console.log(String.raw `Hi\n${2+3}!`) // "Hi\n5!"
console.log(String.raw `Hi\u000A!`) // "Hi\u000A!"
let name = "Bob";
console.log(String.raw `Hi\n${name}!`) // "Hi\nBob!"
3.codePointAt()
能够正确处理 4 个字节储存的字符,返回一个字符的码点。
codePointAt()方法返回的是码点的十进制值
console.log("𠮷c".codePointAt(0)) //134071
console.log("𠮷c".codePointAt(1)) //57271
console.log("𠮷c".codePointAt(2)) //99
由于“𠮷”需要4个字节储存,js会将“𠮷”视为两个字符,
codePointAt()方法第一个位置能正确返回“𠮷”的十进制码点,
但第二个位置返回的是“𠮷”的后两个字节对应的十进制码点
要想解决这个问题我们可以使用for...of循环或者扩展运算符(...)
let s = '𠮷c';
for (let ch of s) {
console.log(ch.codePointAt(0)); //134071 99
}
let arr = [...'𠮷c'];
arr.forEach(
ch => console.log(ch.codePointAt(0)) //134071 99
);
4.normalize()
用来将字符的不同表示方法统一为同样的形式,这称为 Unicode 正规化
参数的四个可选值:
NFC(默认)标准等价合成:返回多个简单字符的合成字符。所谓“标准等价”指的是视觉和语义上的等价
NFD 标准等价分解:在标准等价的前提下,返回合成字符分解的多个简单字符。
NFKC 兼容等价合成:所谓“兼容等价”指的是语义上存在等价,但视觉上不等价。
NFKD 兼容等价分解:即在兼容等价的前提下,返回合成字符分解的多个简单字符。
5.includes(), startsWith(), endsWith()方法
用来确定一个字符串是否包含在另一个字符串中
includes():返回布尔值,表示是否找到了参数字符串
startsWith():返回布尔值,表示参数字符串是否在原字符串的头部。
endsWith():返回布尔值,表示参数字符串是否在原字符串的尾部。
let str='jxyhahaha'
console.log(str.includes('h',4));
console.log(str.startsWith('h',4));
console.log(str.endsWith('h',4));
第一个参数是参数字符串,第二个参数是表示开始搜寻的位置
6.repeat()
repeat方法返回一个新字符串,表示将原字符串重复n次。
参数如果是小数,则会向下取整
如果repeat的参数是负数或者Infinity,会报错
如果参数是 0 到-1 之间的小数,则取整为0,参数为NaN时也视为0
console.log('x'.repeat(3)) //xxx
console.log('hello'.repeat(2)) //hello
console.log('na'.repeat(2.9)) //nana
console.log('na'.repeat(Infinity)) // RangeError
console.log('na'.repeat(-1)) // RangeError
console.log('na'.repeat(-0.9)) // ''
console.log('na'.repeat(NaN)) // ''
7.padStart(),padEnd()
padStart(),padEnd()接受两个参数,第一个参数是补齐字符串生效的最大长度,第二个参数是用来补全的字符
如果用来补全的字符串与原字符串两者的长度之和超过了最大长度时,则会截取超出的字符串。
如果原字符串长度等于或大于补全最大长度时,则字符串补全不生效。
console.log('a'.padStart(4, 'jxy')); //jxya
console.log('b'.padEnd(5, 'jxy')); //bjxyj
console.log('xxx'.padStart(2, 'ab')); //xxx
console.log('abc'.padStart(10, '0123456789')); //0123456abc
如果省略第二个参数,默认使用空格补全长度。
console.log('x'.padStart(4)); //' x'
常见用途
为数值补全指定位数
console.log('1'.padStart(10, '0')) //0000000001
console.log('12'.padStart(10, '0')) //0000000012
提示字符串格式
console.log('12'.padStart(10, 'YYYY-MM-DD')) //YYYY-MM-12
console.log('09-12'.padStart(10, 'YYYY-MM-DD')) //YYYY-09-12
8.trimStart(),trimEnd()
trimStart()消除字符串头部的空格,trimEnd()消除尾部的空格,返回的都是新字符串,不会修改原始字符串
console.log(' abc '.trimStart()) //'abc '
console.log(' abc '.trimEnd()) //' abc'
除了空格键,这两个方法对字符串头部(或尾部)的 tab 键、换行符等不可见的空白符号也有效。
9.matchAll()
matchAll()方法返回一个正则表达式在当前字符串的所有匹配
const regexp = /t(e)(st(\d?))/g;
const str = 'test1test2';
console.log([...str.matchAll(regexp)]) //[['test1', 'e', 'st1', '1'],['test2', 'e', 'st2', '2']]
10.replaceAll()
从字符串中替换所有匹配的字符,返回新字符串,不改变原字符串
console.log('aaaccgg'.replaceAll('a','o')) //oooccgg
replaceAll()的第二个参数可以使用一些特殊字符
$&:匹配的字符串
$`:匹配结果前面的文本
$':匹配结果后面的文本
$n:匹配成功的第n组内容,n是从1开始的自然数。这个参数生效的前提是,第一个参数必须是正则表达式
$$:指代美元符号$
console.log('aaaccgg'.replaceAll("a","$&")) //aaaccgg
console.log('aaaccgg'.replaceAll("a","$`")) //aaaccgg
console.log('aaaccgg'.replaceAll("a","$'")) //aaccggaccggccggccgg
console.log('aaaccgg'.replaceAll(/(ac)(cg)/g,"$2$1")) //aacgacg
console.log('aaaccgg'.replaceAll("a","$$")) //$$$ccgg
replaceAll()的第二个参数也可以是一个函数
console.log('aabbcc'.replaceAll('b', () => '_')) //aa__cc
11.at()
at()方法接受一个整数作为参数,返回参数指定位置的字符,支持负索引(即倒数的位置)。
如果参数位置超出了字符串范围,at()返回undefined。
console.log('jxyhao6'.at(2)) //y
console.log('jxyhao6'.at(10)) //undefined
console.log('jxyhao6'.at(-6)) //x