ES6学习3(各种类型的拓展)

字符串的拓展

字符的Unicode表示法

ES5中,Unicode必须是\uxxxx形式的,少与4位不行,多于四位必须拆成两个4位的来表示。在ES6中,将一个码点值放在大括号中可以自动解析。与双字节表示等价。

console.log("\uD842\uDFB7");// "��"
console.log("\u20BB7");//乱码
console.log("\u{20BB7}");//正常解析
console.log("\u41");//报错
console.log("\u{41}");//A
console.log('\u{1F680}' === '\uD83D\uDE80');//true

codePointAt()

在JS内部,字符以UTF-16的格式储存,每个字符固定为两个字节,对于那些需要4个字节来储存的字符,JS认为他们是两个字符。此时charAt方法和charCodeAt方法都无法完整获取这样的字符的码点值。
codePointAt可以

var s = '��b';

console.log(s.codePointAt(0).toString(16)); // 20bb7
console.log(s.codePointAt(2).toString(16)); // 62

可以看到,这个方法正确的获取了码点,双字节和四字节的都可以。
不过注意到b应该是第2个字而我们传进了2。因为这个方法并不能判断这个字符前面的所有字符是双字节还是四字节的,所以只能按照双字节的下标来。
这个问题是可以解决的。使用for…of循环,它可以正确识别4字节字符。

var s = '��a';
for (let ch of s) {
  console.log(ch.codePointAt(0).toString(16));
}

String.fromCodePoint()

String.fromCharCode的支持四字节版

String.fromCodePoint(0x20BB7)

字符串遍历器接口

刚才已经提到了,使用for…of可以正确识别4字节字符为一个字符。

at()

这个是charAt的四字节版,目前貌似大多数都没实现。

'��'.at(0) // "��"

normalize()

标准化Unicode
比如带音标的字母,可以2字节表示也可以4字节表示,这个方法标准化它

'\u01D1'.normalize() === '\u004F\u030C'.normalize()

includes(), startsWith(), endsWith()

  • includes():返回布尔值,表示是否找到了参数字符串。
  • startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
  • endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
var s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true
s.startsWith('world', 6) // true
s.endsWith('Hello', 5) // true
s.includes('Hello', 6) // false

repeat

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"
'na'.repeat(0) // ""

padStart(),padEnd()

ES7中推出了字符补全长度的功能,如果某个字符串不够指定长度,就会在头部或尾部补全。

'x'.padStart(5, 'ab') // 'ababx'
'x'.padStart(4, 'ab') // 'abax'

位数超了会截掉用来补全的字符串

'abc'.padStart(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值