欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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方法返回一个正则表达式在当前字符串的所有匹配

上一篇:

下一篇: