chrome --js-flags="--harmony"
GoogleChromeのdevチャンネルでタイトルの様なコマンドラインオプションを付けると、ES Harmonyの機能を幾つか使えるみたい。
元ネタ: https://mail.mozilla.org/pipermail/es-discuss/2012-January/019133.html
ブロックスコープ
- harmony:block_scoped_bindings [ES Wiki]
- let, const, function の宣言はブロックスコープになる
...はずなんだが、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"
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では拡張機能内とコンテンツ内とでデフォルトの使用バージョンが異なる仕組みなっている)