ECMAScript 6 草案裡的文法與 ES5 的差異

我最近做了一個 ECMAScript 6 的 HTML 版語法:

http://dev.oupeng.com/wp-content/uploads/es6-grammar.html

包含以下功能:

  1. 可以從產生式的定義找到使用該產生式的產生式(反方向連結),這特別是
     對於理解有小差異的產生式的(例:BindingElement vs.
     AssignmentElement)所使用的地方有幫助。

  2. 有跟 ES5 差異的註解。

紫雲飛[1]有提到一個日本人也做了類似的 HTML 版的 ES6 文法[2],不過那個在
我的 IE10 動不了(之後有機會送個補丁),另外就是我這份是從 wiki 裡的
MediaWiki 源碼生成的,這裡還希望大家可以幫忙更新。

我希望把這份放到 W3C 的空間,之後開一串新的討論這個。


節錄一些 ES6 跟 ES5 的差異,去除掉完全新功能的部份:

  UnicodeIDStart ::
      - 在以下 Unicode 分类中的字符:Lu, Ll, Lt, Lm, Lo, Nl。
      + 任何具有 Unicode 属性 “ID_Start” 的 Unicode 字符。

有人有什麼好例子嗎?


  UnicodeIDContinue ::
    - 在以下 Unicode 分类中的字符:Lu, Ll, Lt, Lm, Lo, Nl, Mn, Mc, Nd,
      Pc。
    + 任何具有 Unicode 属性 “ID_Continue” 的 Unicode 字符。

同上。

  Keyword :: 以下之一
    - class export typeof
    + class export let typeof

  FutureReservedWord :: 以下之一
    或在严格模式下以下之一
    - implements let private public yield
    + implements private public yield

這個還真是有點前途堪憂啊,IE 10 和 V8 都還可以把 "let" 當變數。話說,是
不是其實 "let" 不是關鍵字也不會有語法曖昧的問題?這個版本的 "of", "is",
"isnt" 還有非嚴格模式的 "yield" 都不是關鍵字。

  IterationStatement :
    - do Statement while ( Expression ) ;
    + do Statement while ( Expression )

測試案例:

  do ; while (false) 1;

感覺這是一個有點久的規範 bug,有人知道有哪些瀏覽器上面是語法錯誤的嗎?

IterationStatement :
    - for ( var VariableDeclarationNoIn in Expression ) Statement
    + for ( var ForBinding in Expression ) Statement

測試案例:

  for (var x = 0 in [1]) ;

在新版應該拋錯,我猜這個大概不會有兼容問題吧(知道這個問題存在的人記得不
要這樣搞 :p)。然後我不知道這個和

  EqualityExpressionNoIn :
    + EqualityExpression [no LineTerminator here] is
      RelationalExpression
    + EqualityExpression [no LineTerminator here] isnt
      RelationalExpression

右邊不是 NoIn 有沒有關係,好像把 NoIn 產生式的算子右邊都容許有 in 的話,
這些都可以歸成

    for ( ExpressionNoInopt ; Expressionopt ; Expressionopt ) Statement

的樣子?還沒認真研究。小金有找到相關的討論串[3]。


[1] http://www.cnblogs.com/ziyunfei/
[2] http://teramako.github.com/ECMAScript/ecma6th_syntax.html
[3]
https://mail.mozilla.org/pipermail/es-discuss/2012-January/thread.html#20203


以上

Kenny
-- 
Web Specialist, Oupeng Browser, Beijing
Try Oupeng: http://www.oupeng.com/

Received on Friday, 18 January 2013 02:28:26 UTC