Forum Webscript.Ru
Программирование => JavaScript & JScript => Тема начата: 0b0rm0t от 25 Апреля 2004, 22:11:23
-
Суть вот в чем: я имею строку, содержащую мат.функцию (например, "3*х+2"). Из нее я делаю функцию f(x) (через new Function).
А теперь вопрос: можно ли как-нибудь узнать, является ли только что созданная функция корректной (нет ошибок синтаксиса типа "3*/х+1")?
Нужно это, чтобы сообщить пользователю, что мол там ошибка, исправляй (знать где она - необязательно).
Проблема то в том, что функция создается всегда, из любой строки, а попытка вычислить значение "неправильной" функции вызывает Эксплореровскую ошибку, что пользователя, конечно, напугает.
Самому строчку разбирать неохота - не столько сложно, сколько излишне - задача того не стоит.
-
-
Это сильно помогает, но не до конца - имена функций, входящих в выражение, оно не проверяет. Так что такой код все равно вызывает ошибку:
Это можно как-нибудь исправить?
И еще: что такое catch(e)? А конкретно - е.
-
обработку исключений нужно включать и при создании функции, и при выполнении. А проще -- никакую функцию вообще не создавать
function safeEval(code){
try {
return eval (code);
} catch (e) {
return "Error: " + (e.description || e.message);
}
}
alert (safeEval("2+2"));
alert (safeEval("foo(3"));
e - это объект класса Error, так называемое исключение. Содержит информацию об ошибке (код, сообщение итп).