nashorn - 如何避免“ReferenceError:”a“未定义”

时间:2016-06-02 05:01:13

标签: nashorn

以下代码抛出ReferenceError:未定义“a”。 是否可以避免它并将变量视为空?

        ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
        Map<String, String> s = new HashMap<String, String>();
//        s.put("a", "a");
        Bindings bindings = engine.createBindings();
        bindings.putAll(s);
        Object res = engine.eval("!a", bindings);
        System.out.println(res);

1 个答案:

答案 0 :(得分:1)

如果你没有任何变量名称&#34; a&#34;在您的作用域链中定义,然后应根据ECMAScript规范抛出ReferenceError。如果你取消注释这一行:

//        s.put("a", "a");

然后&#34; a&#34;已定义,因此没有ReferenceError。

您可以使用&#34; typeof&#34;来检查是否定义了变量。运营商。 &#34; typeof a ==&#39; undefined&#39;&#34;对于未定义的变量&#34; a&#34;将评估为false。您未获得未定义变量的ReferenceError。这也是符合标准的行为。