javascript - 在 Java 7 上运行符合 ECMAScript 5 的 javascript

标签 javascript java java-7 ecmascript-5

我想使用 Java 7 的嵌入式 javascript 引擎运行 javascript。我尝试运行的代码符合 ECMAScript 5,这应该不是问题,因为嵌入式 Rhino 的版本是 1.7 release 3。支持它。然而,运行以下代码段不起作用:

    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    engine.eval("var char = 'a';");

它因错误 missing variable name 而失败,这表明 char 是保留关键字。但是,char 在 ECMAScript 5 中不再保留,所以我完全糊涂了。问题是哪个 javascript 版本应该与 java 7 中的嵌入式 Rhino 一起工作?

我使用的是java 1.7.0_80,引擎报告的语言版本是1.8,引擎版本是1.7 release 3 PRERELEASE .

最佳答案

正如@RealSkeptic 所指出的,OpenJDK 7 (Rhino 1.7 r4) 的嵌入式脚本引擎在运行上述 javascript 片段时没有问题。好像Rhino 1.7 r3不能运行,所以使用Oracle Java 7运行需要1.7 r4(或以上)的外部Rhino,可以从here下载。为了完整起见,问题中基于 Rhino 自己的 API 的代码的 java 等效项如下所示:

import org.mozilla.javascript.Context;
import org.mozilla.javascript.ScriptableObject;

public class Rhino {

    public static void main(String[] args) throws Exception {
        Context context = Context.enter();
        try {
            ScriptableObject scope = context.initStandardObjects();
            context.evaluateString(scope, "var char = 'a'", "test", 1, null);
        } finally {
             Context.exit();
        }
   }

请注意,导入声明很重要,因为相同的类可以捆绑在 JDK 中的不同包中:

import sun.org.mozilla.javascript.internal.Context;
import sun.org.mozilla.javascript.internal.ScriptableObject;

导入它们会导致将嵌入式引擎与 Rhino 的 API 一起使用,这将无法正常工作。

关于javascript - 在 Java 7 上运行符合 ECMAScript 5 的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211039/

相关文章:

javascript - AngularJS 从按钮单击中选择选项卡

java - 如何安排每小时开始的任务

javascript - 将文件拖放到 Html 输入

javascript - 从 Hooks 重构为类组件

javascript - 仅突出显示单击的 div

java - Java 中数组的微妙行为

java - 无法使用可执行 C :\Program Files\Java\jdk-10. 0.1\bin\java.exe 确定 Java 版本

java - debian 蓝牙 bluecove java7 不工作

java-7 - 我如何访问这个特定的类(class)?

java - HashMap在并发访问中挂起