Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

再探源代码中的Unicode转义

  Unicdode转义的保留字可以作为变量名也许只是Chrome的BUG,但在Firefox和IE上Unicode转义居然可以作为关键字来使用,这感觉比Chrome还逆天。少ES5中并没有定义可以这么用的(ES6有没有定义我就不知道了),目前所有浏览器的实现都不规范吗?
  Chrome中可以把Unicode转义的关键字代码作为变量名来使用,而Firefox和IE不行。光从这点看,Chrome确实是个BUG,虽然这个BUG影响并不大。但我们要考虑另一个问题,Firefox和IE为什么不能拿关键字作为变量名来使用呢?如果为了安全考虑而特别过滤,那才是符合标准的。但是它们不能作为变量名的原因不是这个,而是它们可以作为关键字来使用,这感觉比Chrome可以作为变量名来使用的问题严重的多了。
  把下面这个代码放到各浏览器上运行试试 \u0074\u0072\u0075\u0065
  虽然它们全都存在BUG,但是这么一看就感觉Chrome的影响可能更小一些。
  再看看ES5是怎么定义Unicode转义用于Identifier的。 In //在@中的
  string literals, //字符串词法、
  regular expression literals, //正则表达式词法、
  and identifiers, //和Identifier词法,
any character (code unit) //任何字符(代码单元)
may also be expressed //也可以被@表示。
  as a Unicode escape sequence //作为@Unicode转义序列,
    consisting of six characters, //由6个字符组成的
  namely \u plus four hexadecimal digits. //也就是"\u"接上四个十六进制位
  只定义了字符串词法、正则表达式词法、Identifier词法,这三种词法中的字符可以使用Unicode转义。正则表达式和字符串中使用Unicode转义是没什么悬念的东西,但是对于Identifier,我们又要看看它的定义了。 Identifier ::
    IdentifierName but not ReservedWord
  也就是说Identifier的定义是不包含保留字的。
  总之,Chrome、IE、Firefox,都没有按照这个规范来实现。

  测试于:
    Chrome 31.0.1650.63 m
    Firefox 26.0
    IE 11.0.9600.16476
网名:
34.203.213.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^