Per collegare una sezione di commento lunga su "non utilizzare la nuova funzione" e/o "eval è cattiva", questa domanda riguarda come accedere, se possibile, informazioni di errore correlate a un costruttore new Function()
in errore. È soprattutto una questione per scoprire un limite a ciò che il browser mi consentirà di fare quando cerco di sfruttare JavaScript nella misura in cui le specifiche e le implementazioni standard del browser lo consentono. Quindi con la dichiarazione di non responsabilità in vigore:Trova dove si verifica un errore di sintassi quando la nuova funzione() non riesce
Quando si valuta il codice tramite una nuova chiamata Function(), esiste un modo per scoprire dove si verifica un errore di sintassi nel contenuto della funzione, se viene valutato il codice di sintassi non valido? cioè .:
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);
}
Quando l'edificio del generatore non riesce, c'è un modo per scoprire (dal browser, non usando JSLint o un'altra libreria esterna) che cosa l'errore è stato o dove si è verificato?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError/prototype menziona che uno SyntaxError ha una proprietà filename
e linenumber
, ma questi sono indefinito in codice dinamico valutata attraverso una nuova funzione() costruttore da quello che posso dire, così facendo leva sulla oggetto errore stesso sembra non essere un'opzione . Esistono modi alternativi per introdurre il codice nel browser in modo che il codice, una volta che sappiamo che ha errori di sintassi da una nuova chiamata di funzione in errore, può essere utilizzato per scoprire dove si trova il problema in base al motore JS utilizzato?
(Naturalmente, se l'obiettivo era trovare gli errori di sintassi, jslint come una fase di pre-elaborazione sarebbe la soluzione ideale, ma sono più interessato a sapere se i browser possono o meno essere in grado di segnalare questa informazione, anche se in forma limitata come "c'è un errore in linea/char ...")
ho trovato una soluzione, ma non avevo considerato errori cattura nella gestione del codice, che è un'aggiunta utile. –
Questo esempio è un'eccezione di runtime (in particolare, un ReferenceError), non un SyntaxError! A proposito, il tuo esempio registra effettivamente dove si è verificato l'errore: "Errore lanciato alla riga 1, colonna 0 in(): callundefinedFunction(); chiamato dalla riga 18, colonna 4 in () in http://run.jsbin.com/runner: generator(); chiamato dalla riga 11, colonna 7 in http://run.jsbin.com/runner: (function() {' –
Bergi
ha fatto? quale proprietà/metodo hai usato sull'errore? non ho trovato nessuna informazione nel docu o nell'esempio (eseguito in chrome) – floww