java - Nashorn 能够将 undefined variable 传递给函数

标签 java undefined nashorn

这是一段非常简单的 Java 代码,用于计算一些 JavaScript 代码:

public static class Logger
{
    public log(String line)
    {
        System.out.println(line);
    }
}
public static void main(String[] args)
{
        NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
        ScriptEngine engine = factory.getScriptEngine(new String[]
        {
                "-strict",
                "--no-java",
                "--no-syntax-extensions"
        });
        engine.put("log", new Logger());
        engine.eval(
            "var ifExists = function(checkExists, otherwise)" +
                "{" +
                    "if(typeof checkExists !== 'undefined')" +
                    "{" +
                        "return checkExists;" +
                    "}" +
                    "else" +
                    "{" +
                        "return otherwise;" +
                    "}" +
                "};" +
            "log.log(ifExists(someVariableThatIsUndefined, 'this string should be returned'));"
        );
}

当它尝试运行 ifExists(someVariableThatIsUndefine, '这个字符串应该被返回') 时,引擎会抛出一个错误,说 someVariableThatIsUndefine 是..well undefined,这违背了实用程序方法检查某些内容是否未定义的目的。

是否有任何可能的方法可以将“someVariableThatIsUndefine”传递给一个函数,该函数返回该变量(如果已定义),否则返回其他内容。

唯一的限制是由解析到引擎的参数“-strict、--no-java、--no-syntax-extensions”控制的

最佳答案

您可以使用

测试函数是否存在
window['myFunctionName'] !== 'undefined'

或者如果是属性(property)

this['myPropertyName'] !== 'undefined'

关于java - Nashorn 能够将 undefined variable 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28903378/

相关文章:

java - 将值添加到列表并转换为 BigInteger - Java

部署前的 Java HotSpot 分析?

c++ - 未定义对静态变量 Foo::a 的引用?

javascript - Java Nashorn - ClassNotFoundException - Java.type()

java - 使用 Java 11 的独立 Nashorn 在 eval 时抛出 java.lang.StackOverflowError

javascript - 使用 Nashorn 遍历数组

java - 发送和接收 UDP 数据包?

java - 是否必须将内部 try-with-resources 放入内部 try-with-resources 或其中一个 try-with-resources 中的所有内容都将自动关闭?

JavaScript - 变量未定义

python - 在函数内定义变量