Verfügt JavaScript über einen Mechanismus zum Bestimmen der Zeilennummer der aktuell ausgeführten Anweisung (und wenn ja, um welche handelt es sich)?
javascript
line-numbers
Matthew Murdoch
quelle
quelle
Antworten:
var thisline = new Error().lineNumber
Wenn dies in der von Ihnen verwendeten Umgebung nicht funktioniert, können Sie Folgendes versuchen:
var stack = new Error().stack
Suchen Sie dann im Stapel nach der Zeilennummer.
quelle
lineNumber
Eigenschaft ist für Fehlerobjekte nicht vorhanden. Auch nichtstack
:-)Sie können verwenden:
quelle
Etwas portabler zwischen verschiedenen Browsern und Browserversionen (sollte in Firefox, Chrome und IE10 + funktionieren):
quelle
var frameRE = /:(\d+:\d+)[^\d]*$/;
regulären Ausdruck anpassen, können Sie sowohl Zeilen- als auch Spaltennummern zurückgeben. Dies ist viel nützlicher, insbesondere wenn das JS in eine lange Zeile verkleinert wird.Sie können versuchen, eine Quelle einer Funktion zu analysieren, um nach Markierungen zu suchen.
Hier ist ein kurzes Beispiel (ja, es ist ein wenig durcheinander).
quelle
Fügen Sie Ihrem Code das folgende Snippet hinzu:
quelle
TypeError: /\(http:[\w\d/.-]+:([\d]+)/.exec(...) is null
.Du kannst es versuchen:
Geben Sie dann einen Fehler aus, den Sie wissen möchten (nicht übermäßig erwünscht, aber er kann Ihnen beim Debuggen helfen.
Hinweis:
window.onerror
Wird in WebKit oder Opera nicht definiert / verarbeitet (das letzte Mal, als ich es überprüft habe).quelle
throwAndResume(resumeFunction);
, die resumeFunction speichert, den Fehler auslöst und in Ihrem Fehlerbehandlungsprotokoll die Details protokolliert. Anschließend können Sie resumeFunction aufrufen, um Ihr Programm fortzusetzen.Rein kann man die Zeilennummer nicht aus Error.stack herausholen, da in Angular die Zeilennummer die Zeilennummer des kompilierten Codes ist. Man kann aber die Information bekommen, in welcher Methode der Fehler erzeugt wurde. Die Klasse Logger in diesem Codefragment fügt diese Information einem neuen Logbucheintrag hinzu.
https://stackblitz.com/edit/angular-logger?file=src/app/Logger/logger.ts
quelle
Wenn Ihr Code JavaScript + PHP ist, ist die aktuelle PHP-Zeilennummer in JavaScript als Literalkonstante verfügbar, da sie in PHP als verfügbar ist
<?= __LINE__ ?>
(Dies setzt natürlich voraus, dass Sie PHP-Kurztags aktiviert haben.)
So können Sie beispielsweise in JavaScript sagen:
Wenn Sie jedoch nicht aufpassen, unterscheidet sich die PHP-Zeilennummer möglicherweise von der JavaScript-Zeilennummer, da PHP Quellzeilen "frisst", bevor der Browser sie jemals sieht. Das Problem besteht also darin, sicherzustellen, dass Ihre PHP- und JavaScript-Zeilennummern identisch sind. Wenn sie unterschiedlich sind, ist die Verwendung des JavaScript-Debuggers des Browsers weniger angenehm.
Sie können sicherstellen, dass die Zeilennummern identisch sind, indem Sie eine PHP-Anweisung einfügen, die die richtige Anzahl von Zeilenumbrüchen schreibt, die zum Synchronisieren der Zeilennummern auf der Serverseite (PHP) und auf der Browserseite (JavaScript) erforderlich sind.
So sieht mein Code aus:
Der Schlüssel ist diese PHP-Anweisung:
Das spuckt genug Zeilenumbrüche aus, damit die von JavaScript angezeigte Zeilennummer mit der PHP-Zeilennummer übereinstimmt. Alle PHP-Funktionsdefinitionen usw. befinden sich oben vor dieser Zeile.
Nach dieser Zeile beschränke ich meine Verwendung von PHP auf Code, der die Zeilennummern nicht ändert.
Das "-6" berücksichtigt die Tatsache, dass mein PHP-Code in Zeile 8 beginnt. Wenn Sie Ihren PHP-Code früher starten, reduzieren Sie diese Anzahl. Einige Leute setzen ihr PHP ganz oben, sogar vor dem DOCTYPE.
(Die Meta-Ansichtsfensterzeile deaktiviert die "Erhöhung der Schriftart" für Android Chrome gemäß diesen Fragen und Antworten zum Stapelüberlauf : Chrome unter Android ändert die Schriftgröße . Betrachten Sie es als Boilerplate, das jede Webseite benötigt.)
Die folgende Zeile dient nur zur Überprüfung, ob ich einen Fehler gemacht habe. Wird im Debugger des Browsers oder durch Klicken mit der rechten Maustaste / Speichern der Webseite angezeigt, wird es zu einem HTML-Kommentar, der den korrekten Namen und die Zeilennummer der Quelldatei anzeigt:
wird:
Wo immer ich eine Zeilennummer sehe, sei es in einer Fehlermeldung oder im JavaScript-Debugger, ist sie korrekt. PHP-Zeilennummern und JavaScript-Zeilennummern sind immer konsistent und identisch.
quelle