Чтобы сократить длинный раздел комментариев "Не использовать новую функцию" и/или "eval is evil", этот вопрос касается того, как получить доступ, если возможно, к информации об ошибке, связанной с конструктором new Function()
, Это в основном вопрос об обнаружении ограничения в том, что браузер позволит мне делать, пытаясь использовать JavaScript в той мере, в какой позволяют спецификации и стандартные версии браузера. Итак, с этим отказом на месте:
При оценке кода с помощью нового вызова Function() существует ли способ узнать, где в содержимом функции возникает синтаксическая ошибка, если выполняется анализ кода недействительного синтаксиса? то есть:.
try {
var generator = new Function(input);
try {
generator();
}
catch (runtimeError) {
console.error("legal code; unforeseen result: ", runtimeError);
}
}
catch (syntaxError) {
console.error("illegal code; syntax errors: ", syntaxError);
}
Когда здание генератора выходит из строя, существует ли способ узнать (из браузера, не используя jslint или другую внешнюю библиотеку), что такое ошибка или где она произошла?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype упоминает, что свойство SyntaxError имеет свойство filename
и linenumber
, но это undefined для динамического кода, оцененного с помощью новой функции (), из того, что я могу сказать, поэтому полагаться на сам объект ошибки, кажется, не вариант. Существуют ли альтернативные способы введения кода в браузер, чтобы код, как только мы знаем, что он имеет синтаксические ошибки из-за неудачного нового вызова функции, может быть использован, чтобы выяснить, где проблема в соответствии с используемым двигателем JS?
(Конечно, если целью было просто найти синтаксические ошибки, то jslint в качестве шага препроцесса будет подходящим решением, но меня больше интересует, могут ли браузеры каким-либо образом сообщать об этом информации, даже если в ограниченной форме, например "есть некоторая ошибка в строке / char..." )