- GraalVM for JDK 23 (最新)
- GraalVM for JDK 24 (アーリーアクセス)
- GraalVM for JDK 21
- GraalVM for JDK 17
- アーカイブ
- 開発ビルド
RhinoからGraalJSへの移行ガイド
このドキュメントは、以前Rhinoエンジンをターゲットにしていたコードの移行ガイドとして機能します。サポートされている機能の概要については、Java相互運用性ガイドを参照してください。
RhinoとGraalJSはどちらも、Java相互運用性について同様の構文とセマンティクスをサポートしています。移行に関連する最も重要な違いを以下に示します。
java.a.b.c.typename
の代わりにJava.type(typename)
#
GraalJSは、使用可能なJavaクラスをJavaScriptスコープに配置しません。Java.type(typename)
を使用してクラスを明示的にロードする必要があります。
GraalJSはグローバルオブジェクトPackages
をサポートしますが、クラスを明示的にロードすることをお勧めします。次のJavaパッケージグローバルは、Nashorn互換モード(js.nashorn-compat
オプション)で使用できます:java
、javafx
、javax
、com
、org
、edu
。
JavaクラスとJavaオブジェクトのコンソール出力 #
GraalJSはビルトイン関数print
を提供します。最も有用な出力を提供するために、JavaクラスとJavaオブジェクトの動作を特別に処理しようとします。
GraalJSはconsole.log
関数も提供することに注意してください。これは、純粋なJavaScriptモードではprint
のエイリアスですが、ノードモードではNode.jsによって提供される実装を使用します。インターオプオブジェクトに関する動作は、ノードモードのconsole.log
では異なります。これは、そのようなオブジェクトの特別な処理を実装していないためです。
JavaScriptとJavaの文字列 #
GraalJSは、内部的にJava文字列を使用してJavaScript文字列を表します。これにより、特定の文字列がJavaScriptコードによって作成されたのか、Javaコードによって作成されたのかを区別することが不可能になります。GraalJSでは、JavaScriptのプロパティはJavaのフィールドやメソッドよりも優先されます。たとえば、length
プロパティ(JavaScriptの)をクエリできますが、JavaScript文字列に対してlength
関数(Javaの)を呼び出すことはできません。length
は関数ではなくデータプロパティのように動作します。
JavaImporter #
JavaImporter
機能は、Nashorn互換モード(js.nashorn-compat
)でのみ使用できます。