- 适用于 JDK 24 的 GraalVM(最新)
- 适用于 JDK 25 的 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
全局对象,但仍建议显式加载类。在 Nashorn 兼容模式(js.nashorn-compat
选项)下,可以使用以下 Java 包全局变量: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 字段或方法。例如,您可以查询 JavaScript 字符串的 length
属性(JavaScript),但不能调用 length
函数(Java)—— length
的行为类似于数据属性,而非函数。
JavaImporter #
JavaImporter
功能仅在 Nashorn 兼容模式(js.nashorn-compat
)下可用。