es6学习之字符串的扩展

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值