=== を使っていてちょっとはまった。
/* * jrunscript -q => Language ECMAScript 1.7 implemention "Rhino" Rhino 1.7 release 3 2012 05 18 */ @Test public void test_Rhino_boolean() throws Exception{ System.out.println(System.getProperty("java.runtime.name")); //=> OpenJDK Runtime Environment System.out.println(System.getProperty("java.runtime.version")); //=> 1.7.0_25-b30 ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); Object object = true; engine.put("object", object); Map<String, Object> map = new HashMap<>(); map.put("object", true); engine.put("map", map); String code = lines("" , " importClass(Packages.foo.Bar); " , " println('----'); " , " println(object == true); " //=> true , " println(object === true); " //=> true , " println(object == false); " //=> false , " println(object === false); " //=> false , " println('----'); " , " println('object='+object); " //=> object=true , " println(typeof object); " //=> boolean , " println(object.class);" //=> undefined , " println('----'); " , " println(map.get('object') == true); " //=> true , " println(map.get('object') === true); " //=> false ... ! , " println(map.get('object') == false); " //=> false , " println(map.get('object') === false); " //=> false , " println('----'); " , " println(map); " //=> {object=true} , " println(typeof map.get('object')); " //=> object , " println(map.get('object').class);" //=> class java.lang.Boolean , " foo = new Bar(); " , " foo.value = object; " //=> success , " foo.value = map.get('object'); " //=> fail: javax.script.ScriptException: sun.org.mozilla.javascript.EvaluatorException: Cannot convert true to boolean (<Unknown source>#23) in <Unknown source> at line number 23 ); engine.eval(code); } private String lines(String... strings) { String text = ""; for (String it : strings) { text += it + "\n"; } return text; }