Aby skrócić długą sekcję komentarzy dotyczącą "nie korzystaj z nowej funkcji" i/lub "eval jest złe", to pytanie dotyczy sposobu dostępu, jeśli to możliwe, informacje o błędach związane z niepowodzeniem konstruktora new Function()
. Najczęściej chodzi o to, aby odkryć ograniczenia w tym, co przeglądarka pozwoli mi zrobić, próbując wykorzystać JavaScript w stopniu, w jakim pozwalają na to spec i standardowe implementacje przeglądarki. Tak więc z tym zastrzeżeniem w miejscu:Znajdź przyczynę błędu składni, gdy nowa funkcja() ulegnie awarii
Podczas oceny kodu za pomocą nowego wywołania Function(), czy istnieje sposób, aby dowiedzieć się, gdzie w treści funkcji występuje błąd składni, jeśli ocenia się kod nielegalnej składni? tj .:
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);
}
Kiedy budowa generatora nie powiedzie się, czy jest jakiś sposób, aby dowiedzieć się (z przeglądarki, nie używając jslint lub innej zewnętrznej biblioteki) Co było błędu lub gdy wystąpił?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype wspomina, że SyntaxError ma właściwość filename
i linenumber
, ale są niezdefiniowane do dynamicznego kodu ocenianego poprzez nową function() konstruktora z tego co mogę powiedzieć, to opierając się na samego obiektu błędu nie wydaje się być rozwiązaniem . Czy istnieją alternatywne sposoby wprowadzenia kodu do przeglądarki, aby kod, jeśli wiemy, że ma błędy składniowe od nieudanego nowego wywołania funkcji, może zostać użyty do ustalenia, gdzie problem jest zgodny z używanym silnikiem JS?
(Oczywiście, gdyby celem było po prostu znalezienie błędów składni, jslint jako krok preprocesowy byłby rozwiązaniem typu "go-to", ale bardziej interesuje mnie to, czy przeglądarki mogą w pewien sposób zostać zgłoszone do raportu ta informacja, nawet jeśli w ograniczonej formie, jak "jest NIEPRAWIDŁOWY błąd on-line/char ...")
Znalazłem rozwiązanie, ale nie brałem pod uwagę błędów łowienia przy uruchamianiu kodu, to użyteczne uzupełnienie. –
Ten przykład to wyjątek środowiska wykonawczego (konkretnie ReferenceError), a nie SyntaxError! Btw, twój przykład rzeczywiście rejestruje, gdzie wystąpił błąd: 'Błąd zgłoszony w linii 1, kolumna 0 w(): callundefinedFunction(); wywoływane z linii 18, kolumna 4 w () w http://run.jsbin.com/runner: generator(); wywoływane z linii 11, kolumna 7 w http://run.jsbin.com/runner: (funkcja() {' –
Bergi
to zrobiła? jaka właściwość/metoda użyłeś w błędzie? nie mógł znaleźć żadnych informacji w dokumencie lub w przykładzie (uruchomiony w chrome) – floww