Я использую движок javascript "nashorn" в java8 для оценки некоторых выражений во время выполнения. У меня есть класс утилиты для этого с методом:
public static String evaluateJavaScriptExpression(String expression) throws ScriptException {
if (expression == null) {
return null;
}
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine javaScriptEngine = scriptEngineManager.getEngineByName(JAVASCRIPT_ENGINE);
return String.valueOf(javaScriptEngine.eval(expression));
}
для которого я создал несколько модульных тестов. Один из них звучит так:
String expression = "var arr = [1, 3, 2, 5, 4]; arr.indexOf(0);";
assertEquals("-1", ExpressionEvaluatorUtil.evaluateJavaScriptExpression(expression));
У меня все отлично работало, пока я использовал версию Java "1.8.0_91". Но кто-то, кто использовал версию java «1.8.0_92», сообщил, что тест не проходит. Я переключил свою версию на сборку 92, и она тоже не удалась. Фактический результат для него - «-1,0». Кроме того, я попробовал тот же код js в консоли Chrome, и он возвращает «-1», как в сборке 91.
Кто-нибудь знает, почему между двумя версиями jdk такая разница в результатах? Это ошибка или его специально изменили?