從 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 選項) 中可用:javajavafxjavaxcomorgedu

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) 中可用。

與我們聯繫