java - Mozilla犀牛 : Default JavaScript Compliance Level

标签 java javascript rhino

要在 Rhino 中执行 JavaScript,必须为脚本创建一个执行上下文。 Context class 的构造函数使用 JavaScript 合规级别 VERSION_DEFAULT。

protected Context(ContextFactory factory) {
    if(factory == null) {
        throw new IllegalArgumentException("factory == null");
    }
    this.factory = factory;
    **setLanguageVersion(VERSION_DEFAULT);**
    optimizationLevel = codegenClass != null ? 0 : -1;
    maximumInterpreterStackDepth = Integer.MAX_VALUE;
}

由于我在 API 中找不到 VERSION_DEFAULT 到任何实际 VERSION_XXX 常量的映射,我想知道 VERSION_DEFAULT 是哪个 JavaScript 合规级别。 Rhino 1.7R1 的发行说明 (*ttps://developer.mozilla.org/en/New_in_Rhino_1.7R1) 指出必须明确指定 JavaScript 版本,但没有提及 Context 时使用哪个版本.setLanguageVersion() 被省略。

最佳答案

浏览了大部分 Rhino 代码后,看起来大多数针对语言版本的测试都是负面测试,例如

if (getLanguageVersion() != Context.VERSION_1_2) {
  return paramCount;
}

VERSION_DEFAULT 被定义为“0”,因此看起来需要将其设置为 1.7 的地方是为了支持“let”和“yield”关键字,因为来自 TokenStream 的以下代码:

if ((result == Token.LET || result == Token.YIELD) && 
  parser.compilerEnv.getLanguageVersion() 
    < Context.VERSION_1_7)
{
  // LET and YIELD are tokens only in 1.7 and later
  result = Token.NAME;
}

关于java - Mozilla犀牛 : Default JavaScript Compliance Level,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1142265/

相关文章:

java - Rhino AstNode toSource 方法编码为 ISO-8859-1?

java - 从文件系统读取二进制文件作为 BLOB 以在 rhino 中使用 javascript

java - 是否可以使用 Java 8 Streams API 进行异步处理?

javascript - 具有不同叠加层/工具提示的图像映射

java - 贾斯珀报告 : How to combine two report streams into one PDF output?

javascript - Array .prototype .filter() 在什么时候检查虚假值?

javascript - 如何在没有 Fleegix.js 的情况下使用 timezone-js 加载时区文件?

c# - RhinoETL - 加入两个表作为输入,在输出时写入两个表

java - 如何让 JPanel 与其组件紧密配合?

java - 有没有办法在方法参数中将 Java 代码片段作为 Groovy Closure 传递?