Rhinoのオフィシャルサイトで概要を見ると、「Rhino が含んでいるものは、JavaScript1.6 のすべての機能」などと書かれています。
「それでは、JavaScript1.7 の機能は使えないのか?」と思ったら使えました。 シェルでversion関数を使ってみると、version(170)までは有効なようです。 180以降の値を指定すると例外がはかれました。
js> version(170) 0 js> version(180) org.mozilla.javascript.WrappedException: Wrapped java.lang.IllegalArgumentExcept ion: Bad language version: 180 (<stdin>#3) ...
JavaScript1.6までは全ての機能が含まれていて、1.7以降の機能は一部しか含まれていないということでしょうか?
jsファイルで1.7の機能を使うには「-version 170」のオプションが必要でした。 「https://developer.mozilla.org/ja/New_in_JavaScript_1.7」を参考にこんなサンプルコードを書いて、
function fib() { var i = 0, j = 1; while (true) { yield i; [i, j] = [j, i + j]; } } var g = fib(); for (let i = 0; i < 10; i++) print(g.next() ); print('==================='); var x = 10; function let_test() { print(x); let(x = 20) { print(x); if(true) { let x = 30; print(x); } print(x); } print(x); } let_test(); print('==================='); var parsedURL = /^(\w+)\:\/\/([^\/]+)\/(.*)$/.exec('https://developer.mozilla.org/ja/New_in_JavaScript_1.7'); var [, protocol, fullhost, fullpath] = parsedURL; print('protocol : ' + protocol); print('fullhost : ' + fullhost); print('fullpath : ' + fullpath);
コマンドプロンプトで「java -jar js.jar -version 170 -w -strict -encoding utf-8 test3.js」と入力して実行します。 結果は、
D:\~\rhino1_7R2<java -jar js.jar -version 170 -w -strict -encoding ut f-8 test3.js 0 1 1 2 3 5 8 13 21 34 =================== 10 20 30 20 10 =================== protocol : https fullhost : developer.mozilla.org fullpath : ja/New_in_JavaScript_1.7
う~ん。 jsファイルを実行するとき、なんでデフォルトが1.6なんですかね? おかげで今まで1.7に気づきませんでした。 1.7の方はまだ完璧な実装じゃないんでしょうか?
というか、Rhino1.7R2がリリースされたの2年以上前ですよね。 2年間そのままってことはもう見捨てられてるんじゃ...
今さら過ぎて失礼しました。 でもまぁ、私が使い始めたの最近ですし(イイワケ)。 見捨てられてるとしても便利ですよね、e4xとか。
---
サンプルソース最後の「parsedURL」のところ、「https://developer.mozilla.org/ja/New_in_JavaScript_1.7」のページの一番下、「正規表現のマッチから値を取り出す」のところから持ってきたコードです。 1.7 以降でしか使えないコードかと思ったら、バージョンの設定なしで使えました。 それはhtmlに埋め込んでfirefoxで実行したときも同じ。 mozilla系だったらバージョンに関係なく使えるんでしょうか?
firefox以外のブラウザで対応しているものがないので、どう判断していいやら。 まぁ、Rhinoでしか使わないからどうでもいいんですけど。