16进制 es6_ES6 对unicode的支持

Chrome 内置抓包工具

Block requests

截取长图

代码的覆盖率分析

Make site better

ES5只支持\uffff(65535)以内的unicode

比如你写"\u22000" //在unicode中对应为生僻字:𢀀

但是最后展示为:"∀0"。

结论:JavaScript 内部,字符以 UTF-16 的格式储存,每个字符固定为2个字节。对于那些需要4个字节储存的字符(Unicode 码点大于0xFFFF的字符),JavaScript 会认为它们是两个字符。

那么参考下各种字符的unicode区间,其实还是有很多会用到的字符,它们的区间大于0xFFFF的。比如我们常见的emoji表情。这些在ES5中就没办法进行处理了。

ES6的写法

万能写法:{}"\u{22000}"

这种写法比较简便,在正则中也可以使用,前提是要有u标示符, 否则会被识别为正则语法中的花括号"𢀀的蛋".match(/\u{22000}/u) //return ["𢀀"]

"𢀀的蛋".match(/\u{22000}/) //return null

String.prototype.charCodeAt vs String.prototype.codePointAt

前者是ES5的写法,后者是ES6的写法,均由字符返回十进制的unicode编码,区别在于是否支持0xffff以上。"𢀀".charCodeAt() //55368 这个值是错的

"𢀀".codePointAt() //139264 十进制

"𢀀".codePointAt().toString(16) //"22000" 转为16进制的快捷方法

String.fromCharCode vs String.fromCodePoint

前者是ES5的写法,后者是ES6的写法,由unicode编码返回相应的字符串。

需要注意参数默认为十进制String.fromCodePoint(0x22000) //"𢀀"

String.fromCodePoint(22000) //"嗰"

正则表达式的Unicode Property支持

ES5中的正则是不支持Unicode Property的,而ES6可以支持,这样我们可以更方便的用正则包含或排除某些字符(常用的unicode字符属性),比较好用的一个是C属性,表示不对应任何字符的unicode码,可以有效的过滤掉没用的unicode码。

比如这个例子:\uffff是一个不对应任何字符的码点,我们就可以很容易的过滤掉这个非法字符。"\u6211\uffff".replace(/\p{C}/u, ''); //我

Babel能不能兼容?

能。Babel编译器可以转换uncode regex, babel-polyfill可以兼容String.fromCodePoint和String.prototype.codePointAt。

注:String.fromCodePoint和String.prototype.codePointAt属于新的API,所有ES6+中新的API,都需要使用babel-polyfill,可以在项目中引用babel-polyfill,或在编译器中配置babel-plugin-transform-runtime.

参考文章

彩蛋:一些有意思的小bugvar reg = /[\u{ffff}-\u{fffff}]/u

reg.test("😁") //true

var reg = /[\u0030-\uffff]/

reg.test("😁") //true

var reg = /[\u{0030}-\u{ffff}]/u

reg.test("😁") //false

var reg = /[\u4e00-\u9fa5]/

reg.test("😁") //false

不用u,进入特殊字符区间,就会出错,期望是false, 实际是true

var reg = /[\u4e00-\uffff]/

reg.test("\u{fffff}")

var reg= /😁/

reg.test("😁") //true

var reg= /😁{2}/

reg.test("😁😁") //false

var reg= /😁{2}/u

reg.test("😁😁") //true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值