js之字符串

210 阅读2分钟

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、标签模板

参考链接:

es6.ruanyifeng.com/#docs/strin…