我有以下代码,
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public class Test {
public static void main(String[] args) throws Exception {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
Test ctrl = new Test();
String[] arr = {"1==1"};
String eer = "1==1";
engine.put("hi", ctrl);
System.out.println(engine.eval(arr[0])); //true
System.out.println(engine.eval(eer)); //true
System.out.println(engine.eval("hi.values()")); //prints 1==1
}
public String values() {
return "1==1";
}
}
我可以理解最后一个sout
语句用双引号括起来,因此它按原样输出值。
我如何制作语句来评估表达式 像其他字符串变量一样?
修改
如果我添加了java,
String result = ctrl.values(); //returns 1==1
System.out.println(engine.eval(result));//true
我在javascript上尝试过相同的
var result = myfun();
function myfun(){
return "1!=1";
}
if(result){
window.alert("yes"); // This came even when condition is false
}
答案 0 :(得分:1)
如何使语句像其他字符串变量一样评估表达式?
为什么不engine.eval()
两次?
System.out.println(engine.eval(engine.eval("hi.values()")));
在java中,如果我添加,[某些代码可以做某事]我在javascript上尝试过相同的东西[一些看起来完全不同的相同代码]
在JavaScript中没有对eval
的隐式调用。这意味着result
包含非空字符串1!=1
,在if语句中变为true
。