ECMAScript 6th 2012-02-27 Draft

ECMAScript 6th のドラフト(harmony:specification_drafts [ES Wiki])が更新されてる。

前回同様に構文のみを抽出した文書を更新。

今回の更新された構文は

  • for-of構文
  • 配列内包表記
  • ジェネレータ構文、式

for-of構文

Firefox 13.0a1 (Nightly) で for-of ステートメントが実装されましたでも取り上げたfor-of構文が入ってきた。Firefox Nightlyではまだ配列的なものにか使えないが、使用上ではオブジェクトでもHasOwnでEnumerableなvalue値も回せそうな感じ。

配列内包表記

Mozilla JavaScript ではお馴染み(?)でしょう。配列内包(Array Comprehention)です。

ジェネレータ構文、式

ジェネレータ式は Mozilla JavaScript で既に使える構文。ジェネレータ式ね。

ジェネレータ構文の方は何だか不思議な書き方。関数名の頭に*をつける模様。

function * gene () {
  var i = 0;
  for ( ; i < 10; ++i) {
    yield i;
  }
}

あ、yieldは完全に僕の想像。AssignmentExpression内に、YieldExpressionがあるんだけど、その定義がどこにも書かれてないんだよね...。だから、どういう書き方になるのかサッパリ。

あと、構文上では

var o = {
  * gene (FormalParameterList) {
    // FunctionBody
  }
};

なんて書き方もできるみたい。

この書き方、おや?と思うかもしれないけど、ちょっと前のドラフト版(http://d.hatena.ne.jp/teramako/20111110/p1) で

var o = {
  func() {
    return "OK";
  },
};

みたいに、一々functionキーワードを付けなくてもメソッド定義ができるようになっているんだよね。その延長上に、* funcName() {}があるわけ。