- 适用于 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
)下可用。