前回 Gjs の ES6 がって書いたけど。
よく考えたら現在 JavaScriptCore や V8 も試せる環境じゃないか。
現状 (2017.10.10) ではどうなのか実験。
Gjs(SpiderMonkey) は 1.48.7
Node.js(V8) は dnf で入る v6.11.3
JavaScriptCore はワカラン、Fedora 26 の /usr/libexec/webkit2gtk-4.0/jsc
jjs(nashorn) は1.8.0_144、–language=es6 オプションで。
jsc は .bashrc にエイリアスを作って準備してと。
Node.js だけ console.log なのを無理矢理 print となるようにしてと。
とりあえず無名関数とアロー関数での this スコープの違い。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | // @ Node.js if ( typeof print === "undefined" ) print = console.log ; let obj = { func: function () { this .str = "優木苗" ; let funcA = function () { print ( this .str); }; let funcB = () => { print ( this .str); }; funcA(); funcB(); } }; obj.func(); |
jjs はアロー関数に対応していなかった。
他は全部対応済なのね、ふむふむ。
Gjs はワーニングを出してくれる親切仕様、イラネーけど。
次は同一ブロックでの let 変数名の多重定義。
1 2 3 4 5 6 7 8 | // @ Node.js if ( typeof print === "undefined" ) print = console.log ; let n = 13; let n = 99; //n = 66; print (n); |
って、おい SpiderMonkey!
jjs ですらエラー判定するのに、まあ次は対応済と解っているけど。
それにしても Node.js のエラー表示はウゼェ。
次に class を作ってみよう、Gjs はまだ対応していないと解っているけど。
1 2 3 4 5 6 7 8 9 10 | // @ Node.js if ( typeof print === "undefined" ) print = console.log ; class Test { constructor(str) { print (str); } } let test = new Test( "むったん" ); |
だよね。
JavaScript の仕様策定は Mozilla がやっているはずなのにな。