nashorn - How to avoid "ReferenceError: "a" is not defined"
nashorn - How to avoid "ReferenceError: "a" is not defined"
下面的代码抛出 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);
如果您的作用域链中没有定义名称为 "a" 的任何变量,那么根据 ECMAScript 规范应该抛出 ReferenceError。如果您取消注释此行:
// s.put("a", "a");
行,然后 "a" 被定义,因此没有 ReferenceError。
您可以使用 "typeof" 运算符检查变量是否已定义。 "typeof a == 'undefined'" 将对未定义的变量 "a" 求值为 false。对于未定义的变量,您不会得到 ReferenceError。同样,这是符合标准的行为。
下面的代码抛出 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);
如果您的作用域链中没有定义名称为 "a" 的任何变量,那么根据 ECMAScript 规范应该抛出 ReferenceError。如果您取消注释此行:
// s.put("a", "a");
行,然后 "a" 被定义,因此没有 ReferenceError。
您可以使用 "typeof" 运算符检查变量是否已定义。 "typeof a == 'undefined'" 将对未定义的变量 "a" 求值为 false。对于未定义的变量,您不会得到 ReferenceError。同样,这是符合标准的行为。