起源,Franky 大神研读 ECMAScript,说是标识符可以是修饰符字符(Modifier letter)啥的,他就查啊查啊的这个修饰符字符是啥。
最后整出个 a? 字符,是修饰符字符,然后测试:
a? = 1;
console.log(a?); ---> 1
恩,证实了 EMCAScript 所说。
然后吧……
console.log('a? '.length) --> 2
*&……%¥#¥……这是毛?!!!
继续拆
'a?'.charAt(0) == "a" ---> tr
'a?'.charCodeAt(1).toString(16) ---> 300
呃,Unicode 的 \?,难道是个 ` (上点) 字符?这玩意是组合的?!
(此PDF中为其中一部分 Combining Diacritical Marks —— 组合变音标记)
原来修饰符字符就是指的 Unicode 中需要依赖其他字符产生新字符的一组特定编码……
ECMAScript 内说其使用的是 Unicode 编码规范,Unicode转义也可以出现在标识符中,转义仅提供单个字符给标识符,js引擎处理的是规范后的标识符文本,虽然也是Unicode的,但不一定是原始那个Unicode串了。
所以,修饰符字符(Modifier letter)这玩意同是 Unicode,照样能用,不过里面没有转义字符,对 JS 来说,它就是俩字符,与普通的俩字符的字符串没毛区别。
突然想到按ASCII标准算字符长度的并截断的代码遇到修饰符有可能要杯具啦,哇哈哈哈哈。
呃,偶的代码果了个然的,杯具。
哦~~~发布blog后,发现163也杯具了,哇哈哈哈哈~~心理平衡鸟~~~
阅读(234) | 评论(0) | 转发(0) |