es6 对字符串的扩展

4 篇文章 0 订阅

js底层采用的是utf-16的编码方式,平时我们可能对utf-8更熟悉一些,他们的区别在于utf-16是采用16位,用两字节来表示一个字符(Unicode码点在\u0000~\uFFFF之间的字符),而utf-8是8位,会根据情况来用一个字节、两个字节,最多不超过三个字节来表示一个字符。

因为utf-16是用两个字节表示,所以大于两个字节的字符,用es5的方法就会出错,例如

这里写图片描述
这个字需要四个字节来存储,js把它识别为两个字符,es5的方法没法来正确处理它,es6为了解决类似的问题,提出了配套的新方法,codePointAt代替charCodeAtat代替charAtfromCodePoint代替fromCharCode

他们的用法与原来的基本一样

但有一点值得注意的是,es6只算是一种语法糖,并不会改变js底层utf-16编码的本质,只是可以在处理这些问题的时候可以把这四个字节看成一个字,但当我们取长度,或者取某一位时,还是会以两个字节为一个长度,像这样:
这里写图片描述
取第零位时,已经正确的把这个字转为了10进制码点,第一位表示的是它的后两个字节,第二位才是它后面的a
这样看起来不友好,我们可以配合es6的for…of方法
这里写图片描述
这样看起来就合理一些。
东西总是要配套的,所以es6跟字符串相关的方法都做了修正,解决了超过两字符的问题,我们尽量使用es6的方法

字符串相关的新方法还有很多,像includes,startsWith,endsWith,padStart,padEnd等。有兴趣的点这里阮一峰es6-字符串的扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值