es6学习之字符串的扩展
程序员文章站
2023-12-21 13:15:46
...
一.字符串的Unicode表示法
js中存储字符采用UTF-16,即每个字符2个字节,对于占用4个字节的字符(“��”,类似于吉祥的吉),只能采用2个字符的处理方法.es6采用的新表示方法也没有改变这个事实.
js表达Unicode可以使用’\uxxxx’,表达范围是\u0000~\uFFFF,无法表达超过0xFFFF的字符
es6将码点放入{}中即可表达大于0xFFFF的字符
'\u{1F680}' === '\uD83D\uDE80'
// true
es6后,JavaScript共有6中方法表达字符串
'\z' === 'z' // true
'\172' === 'z' // true
'\x7A' === 'z' // true
'\u007A' === 'z' // true
'\u{7A}' === 'z' // true
二.codePointAt()
下面的s在js中是3个字符,6个字节存储.为了能得到类似吉祥的吉的Unicode码,需要做如下for of遍历
let s = '��a';
for (let ch of s) {
console.log(ch.codePointAt(0).toString(16));
}
// 20bb7
// 61
// 判断一个字符是由2个还是4个字节存储,做如下判断
function is32Bit(c) {
return c.codePointAt(0) > 0xFFFF;
}
is32Bit("��") // true
is32Bit("a") // false
三.String.fromCodePoint()
(1)可以识别大于0xFFFF的字符,即使用4个字节存储的字符,是codePointAt的反向函数
(2)codePointAt定义在实例上,fromCodePoint定义在String对象上
String.fromCodePoint(0x20BB7)
// "��"
String.fromCodePoint(0x78, 0x1f680, 0x79) === 'x\uD83D\uDE80y'
// true
四.字符串Iterator
for (let codePoint of 'foo') {
console.log(codePoint)
}
五.at()
ES5 对字符串对象提供charAt方法,返回字符串给定位置的字符。该方法不能识别码点大于0xFFFF的字符。目前有提案使用at()
六.includes(),startsWith(),endsWith()
let s = 'Hello world!';
s.startsWith('world', 6) // true , 第二个参数是开始搜索位置下标
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false
七.repeat() 将原字符串重复n次
'x'.repeat(2); // 'xx'
八.padStart(),padEnd()
// 参数1为补全后的长度,参数2为补全需要的字符
'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'
'x'.padEnd(5, 'ab') // 'xabab'
'x'.padEnd(4, 'ab') // 'xaba'
九.matchAll()
matchAll方法返回一个正则表达式在当前字符串的所有匹配