Automatische Semikolon-Einfügung deaktivieren oder zumindest erkennen

9

Ich schreibe immer in strict mode und hoffe, dass ich von Problemen mit der JavaScript-Sprache abgeschirmt (oder zumindest gewaltsam aufgefordert werde, meinen Code zu ändern), wie veraltete Methoden oder falsch interpretierbare Syntax.

Allerdings habe ich dies Problem heute und ich fragte mich, ob es eine Möglichkeit gab, die Semikolon-Einfügung im Browser zu deaktivieren oder sonst ähnliche "Kompilierzeit" -Fehler zu haben?

JS [H / L] int ist nicht in der Lage, zu erkennen, wo JS-Interpreter Semikolons einfügen und diese für uns abschwächen würde, oder?

BEARBEITEN

JShint und JSLint beide Fehler Wenn eine neue Zeile vorhanden ist, wird nach einem return -Schlüsselwort ein Semikolon gefunden. Ich weiß jedoch nichts über die anderen Vorbehalte bezüglich der automatischen Einfügung und ob sie auch jeweils erkannt werden.
Unabhängig davon, ob eine Antwort tatsächlich den "deaktivierenden" Teil löst, wäre das relevanter.

    
Hashbrown 28.08.2013, 07:50
quelle

2 Antworten

3

Der Ausdruck nach return keyword MUSS IMMER in der gleichen Zeile wie das Schlüsselwort beginnen, dies ist nicht mit dem Interpreter verbunden, es ist durch den ECMAScript-Standard definiert, es ist ein schlechter Teil der Sprache, aber wenn man die Regeln des Schreibens respektiert den von Douglas Crockford beschriebenen JS-Code wirst du dann nicht mehr sehen.

Aus "JavaScript: Die guten Teile" von Douglas Crockford (Anhang A.3 Schreckliche Teile):

  

JavaScript hat einen Mechanismus, der versucht, fehlerhafte Programme durch automatisches Einfügen von Semikola zu korrigieren. Verlassen Sie sich nicht darauf. Es kann schwerwiegendere Fehler maskieren.

     

Es fügt manchmal Semikolons an Stellen ein, an denen sie nicht erwünscht sind. Berücksichtigen Sie die Auswirkungen der Semikoloneinfügung auf die Rückgabeanweisung. Wenn eine return-Anweisung einen Wert zurückgibt, muss dieser value-Ausdruck in derselben Zeile wie die return-Anweisung beginnen:

%Vor%
  

Dies scheint ein Objekt zurückzugeben, das ein Statuselement enthält. Leider macht Semikolon Insertion es zu einer Anweisung, die undefined zurückgibt. Es gibt keine Warnung, dass die Semikoloneinfügung die Fehlinterpretation des Programms verursacht hat. Das Problem kann vermieden werden, wenn {am Ende der vorherigen Zeile und nicht am Anfang der nächsten Zeile steht:

%Vor%

Siehe auch die Code-Konventionen für JavaScript von Douglas Crockford: Ссылка

    
micnic 28.08.2013 08:02
quelle
0

Ich dachte nur, ich würde jedem helfen, der auf diese Frage stößt Ich habe angefangen, den Closure-Compiler von Google zu verwenden, um JS für ein Projekt zu minimieren, und es gab mir einige praktische Warnungen.

%Vor%

Die fehlerhaften Codebausteine ​​waren wie folgt (die Kommentare beschreiben, was der Code fehlte, von dem der Compiler mich alarmierte):

file1.js: 150

%Vor%

file2.js: 201

%Vor%

Ich weiß nicht, ob es alle Fehler erkennen wird, die der Browser aufräumt (also werde ich das wahrscheinlich nicht als eine Antwort markieren), aber es ist viel mehr als YUIs Minifier tun für mich (was all diese Fälle ignorierte).
Auch im Vergleich zu YUI, der Compiler ist in der Lage, mehrere Dateieingaben aufzunehmen und so kann ich Zeilennummern pro Datei für Fehler geben, und doesn ' t Fehler beim / redect das Schlüsselwort debugger ).
Hoffentlich hilft es dir auch.

    
Hashbrown 07.04.2015 04:28
quelle

Tags und Links