我們從Oracle JDK 8u77升級到8u92,突然之前正在工作的腳本不再有效。一個最小的再現是:Nashorn不再使用BigDecimal
Map<String, Object> attributes = Collections.singletonMap("GROSSREIMBAMOUNT", BigDecimal.ZERO);
String script = "GROSSREIMBAMOUNT.toFixed(2)";
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
for (Entry<String, Object> entry : attributes.entrySet()) {
jsEngine.put(entry.getKey(), entry.getValue());
}
System.out.println(jsEngine.eval(script));
此前我們得到了
0.00
但現在我們正在。
TypeError: GROSSREIMBAMOUNT.toFixed is not a function
typeof
現在返回object
而這在以前將返回number
。
我的問題是這種行爲故意或錯誤?我首先雖然這將是一個錯誤,但JDK-8010732似乎表明否則。
我在JDK 8發行說明中沒有發現任何提及。 @ hannes-wallnöfer引用的錯誤是https://bugs.openjdk.java.net/browse/JDK-8146264 –