Мы обновили Oracle JDK 8u77 до 8u92, и вдруг скрипты, которые раньше работали, больше не работают. Минимальный репродуктор это:
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, кажется, предполагает обратное.