chrome --js-flags="--harmony"

GoogleChromeのdevチャンネルでタイトルの様なコマンドラインオプションを付けると、ES Harmonyの機能を幾つか使えるみたい。

元ネタ: https://mail.mozilla.org/pipermail/es-discuss/2012-January/019133.html

ブロックスコープ

...はずなんだが、Strictモードでないと動作しないorz バグ?

"use strict";
var hoge = "outer";
const HOGE = "OUTER";
function foo(msg) {
  console.log("outer " + msg);
}
{
  const HOGE = "INNER";
  let hoge = "inner";
  function foo (msg) {
    console.log("inner " + msg);
  }
  foo("block");      // "inner block"
  console.log(HOGE); // "INNER"
  console.log(hoge); // "inner"
}
foo("block");        // "outer block"
console.log(HOGE);   // "OUTER"
console.log(hoge);   // "outer"

Proxy

Proxy が使えるようになってる。黒魔術的なオブジェクトを作成したいときに役立つ(ぉ

Map と WeakMap

Map は純粋にkeyとvalueを仕込むものと思われる。試してみた感じkeyもvalueリテラル値でもオブジェクトでもOKそう。

WeakMap は key を弱い参照として value を仕込むもの。key への参照が無くなったら、WeakMap内のkeyとvalueもガベージされる仕組み。(key にはリテラル値ではなくオブジェクトである必要がある)

typeof null

typeof null が "null" を返すようになってる

var a = null;
typeof a; // "null"

これで、fxxk な typeof がマシになりますね。

追記(2012-02-13)

Jan 18 meeting notesの議論があったようで、Issue 1913: Harmony: typeof null should no longer return 'null'のIssueでtypeof nullは無効になった模様。


ただ、まあ既存JavaScriptとの互換性は崩れるので今のところテスト目的にしか使えなさそう。拡張機能ではデフォルトでonになったりするのかな? (Firefoxでは拡張機能内とコンテンツ内とでデフォルトの使用バージョンが異なる仕組みなっている)