eval javascript, проверьте синтаксическую ошибку - PullRequest
38 голосов
/ 07 февраля 2011

Я хотел знать, возможно ли найти через javascript, если у вызова eval () есть синтаксическая ошибка или неопределенная переменная и т. Д. ... так скажем, я использую eval для некоторого произвольного javascript, есть ли способ перехватаошибка вывода этого eval?

Ответы [ 4 ]

58 голосов
/ 07 февраля 2011

Вы можете проверить, является ли ошибка ошибкой SyntaxError.

try {
    eval(code); 
} catch (e) {
    if (e instanceof SyntaxError) {
        alert(e.message);
    }
}
11 голосов
/ 13 октября 2014

При использовании try catch для отлова определенного типа ошибок следует убедиться, что другие типы исключений не подавляются. В противном случае, если вычисленный код выдаст исключение другого типа, он может исчезнуть и вызвать непредвиденное поведение кода.

Я бы предложил написать такой код:

try {
    eval(code); 
} catch (e) {
    if (e instanceof SyntaxError) {
        alert(e.message);
    } else {
        throw( e );
    }
}

Обратите внимание на раздел "else".

2 голосов
/ 07 февраля 2011

Вы можете использовать JsLint , который содержит анализатор javascript, написанный на javascript.Он даст вам много информации о вашем коде, его можно настроить на более спокойный или нет, и т. Д ...

0 голосов
/ 07 февраля 2011

Согласно документации Mozilla для eval:

eval возвращает значение последнего вычисленного выражения.

Так что я думаю, что вам не повезло. В этом же документе также не рекомендуется использовать eval:

eval () - опасная функция, которая выполняет код, переданный ей с привилегиями вызывающей стороны. Если вы запускаете eval () со строкой, на которую может повлиять злоумышленник, вы можете в конечном итоге запустить вредоносный код на компьютере пользователя с разрешениями вашей веб-страницы / расширения. Что еще более важно, сторонний код может видеть область, в которой был вызван eval (), что может привести к возможным атакам, в которых подобная функция не восприимчива.

Таким образом, независимо от того, пожалуйста, имейте в виду риски, прежде чем использовать эту функцию.

...