- 適用於 JDK 23 的 GraalVM (最新)
- 適用於 JDK 24 的 GraalVM (搶先體驗)
- 適用於 JDK 21 的 GraalVM
- 適用於 JDK 17 的 GraalVM
- 封存
- 開發建置
從 Rhino 遷移到 GraalJS 的指南
本文檔作為先前針對 Rhino 引擎的程式碼的遷移指南。請參閱Java 互通性指南以了解支援功能的概觀。
Rhino 和 GraalJS 都支援類似的 Java 互通性語法和語義。此處列出了與遷移相關的最重要差異。
Java.type(typename)
取代 java.a.b.c.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 模式下使用 Node.js 提供的實作。Node 模式中 console.log
針對互通物件的行為有所不同,因為它不對這類物件實作特殊處理。
JavaScript 與 Java 字串 #
GraalJS 在內部使用 Java 字串來表示 JavaScript 字串。這使得無法區分特定字串是由 JavaScript 建立還是由 Java 程式碼建立。在 GraalJS 中,JavaScript 屬性優先於 Java 欄位或方法。例如,您可以查詢 length
屬性(JavaScript 的),但您無法在 JavaScript 字串上呼叫 length
函式(Java 的)- length
的行為就像資料屬性,而不像函式。
JavaImporter #
JavaImporter
功能僅在 Nashorn 相容模式 (js.nashorn-compat
) 中可用。