1、字符的Unicode表示法
js允许使用\uxxxx表示一个字符,其中xxxx就是表示字符的Unicode的码点
大于\uffff的码点使用{}包着,如\u{20bb7},表示'𠮷'
2、codePointAt方法
js中字符以UTF-16的字符式存储,1个字符固定2个字节,大于\uffff的字符是2个字符4个字节
var s = '𠮷';
s.length //2
s.charAt(0) //''
s.charAt(1) //''
s.charCodeAt(0) //55362
s.charCodeAt(1) //57271
s.codePointAt(0) //134071
s.codePointAt(1) //57271
s.codePointAt(0).toString(16) //20bb7
charAt无法读取整个字符,charCodeAt只能分别返回前2个字节和后2个字节的值,codePointAt能正确处理4个字节存储的字符,返回的是十进制值,toSting转成十六进制值
3、String.fromCodePoint()
用于从码点返回字符串
String.fromCharCode方法不能识别32位的UTF-16编码的字符(Unicode编号大于0xffff)
String.fromCodePoint(0x20bb7)
//'𠮷'
fromCodePoint可以接收多个参数,返回字符串
4、字符串的遍历接口
for..of..能正确识别32位的UTF-16字符的码点
var s = '𠮷a';
for(let ch of s){
console.log(ch.codePointAt(ch).toString(16));
}
//20bb7
//61
5、at()
返回字符串给定位置的字符,(注意目前还是提案)
'abc'.charAt(0) //'a'
'𠮷a'.charAt(0) //'\uD842' 不能正确识别大于0xffff的字符
'𠮷a'.at(0) //'𠮷'
6、normalize()
字符的不同表示,Unicode正规化
7、includes()、startsWith()、endsWith()
确定一个字符串是否包含在另一个字符串中,返回布尔值
var s = 'hello word';
s.includes('hello'); //true
s.includes('zz'); //false
s.startsWith('hello'); //true
s.endsWith('hello'); //false
s.includes('word', 6); //true
s.startsWith('word', 6); //true
s.endsWith('word', 6); //true
8、repeat()
将字符串重复n编,返回新的字符串
'ni'.repeat(3) //'ninini'
'ni'.repeat('3') //'ninini'
'ni'.repeat('3a') //''
如果参数0到-1,等同于0
如果是其他负数,报错
如果是字符串,转成数字
9、padStart()、padEnd()
字符串补全长度作用
'abc'.padStart(5) //' abc'
'abc'.padStart(5, 'x') //'xxabc'
'abc'.padStart(5, 'xyzs') //'xyabc'
'abc'.padStart(2, 'xyzs') //'abc'
'09-12'.padStart(10, 'YYYY-MM-DD') //'YYYY-09-12'
如果省略第二个参数,使用空格来补充
如果用来补全的字符串与原来的长度之和超出了指定的最小长度,则会截去超出位置的补全字符串
如果原字符串的长度等于或大于指定的最小长度,则返回原字符串
10、String.raw()
用来充当模板字符串的处理函数,返回一个反斜杠都被转义的字符串
String.raw`Hi\n${3 + 2}`
//"Hi\\n5"
11、模板字符串
使用反引号,内部变量使用${},可以是表达式、函数调用
模板字符串的空格和换行都是被保留下来的
12、标签模板
参考链接: