以下代码抛出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);
答案 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。这也是符合标准的行为。