ein einzelnes gleich in einem if. Javascript. Irgendein guter Grund?

7
%Vor%

Ich habe ein Projekt geerbt und bin auf etwas Seltsames gestoßen. Der Typ, der das Projekt begonnen hat, ist ein erfahrener Programmierer, definitiv mehr als ich. Gibt es einen Wert oder einen Grund (egal wie schlecht) dabei:

%Vor%

Es funktioniert jetzt und es ist in einem Teil des Codes, den ich nicht berühren muss. Ich möchte es nicht ändern und unerwartete Konsequenzen daraus ziehen lassen, ohne zu wissen, was es tun könnte.

    
JoeM05 24.09.2010, 21:54
quelle

7 Antworten

12

Es kann korrekt sein. Der Code entspricht:

%Vor%     
LatinSuD 24.09.2010, 21:59
quelle
3

Wenn der el = $("#pr_attr_plain_"+key) zu 0 oder false oder null oder undefined ausgewertet wird, wird er nicht in den if-Block aufgenommen. In allen anderen Fällen wird es.

    
Aishwar 24.09.2010 21:58
quelle
3

Es ist nur eine hässliche Art zu schreiben

%Vor%

ist wiederum dasselbe wie

%Vor%

aber etwas schneller (ein Aufruf weniger zur $ -Funktion) und wohl einfacher zu lesen. Auf der anderen Seite gibt es mehrere Probleme damit:

  • $(something) wird niemals als falsch ausgewertet (es gibt ein jQuery-Objekt zurück, das truthy ist). Wer das geschrieben hat, meinte wahrscheinlich $(something).length .
  • es gibt keine Notwendigkeit für das ganze if . Sie können einfach $("#pr_attr_plain_"+key).text(val === "" ? 0 : " " + val); schreiben und es hat keine Auswirkungen, wenn der jQuery-Selektor keinem Element entspricht.
  • Wenn el noch nicht verwendet wurde, sollten Sie var el =... nicht el = schreiben, andernfalls wird el global sein.
  • Da es ein häufiger Fehler ist, versehentlich = anstelle von == zu schreiben, ist es ratsam, Zuweisungen innerhalb von Bedingungen zu vermeiden oder eine zusätzliche Klammer zu verwenden, um klarzustellen, dass Sie es absichtlich getan haben:

.

%Vor%     
Tgr 24.09.2010 22:39
quelle
1

Wie auf JSLint hingewiesen wurde, ist es eine schlechte Übung, da es auch ein häufiger Fehler sein kann. Besser es zu beheben und die Wahrscheinlichkeit einer falschen Interpretation zu reduzieren.

    
AutoSponge 24.09.2010 23:09
quelle
0

Äh, vielleicht testet man den Operator $ ? Ich würde riskieren eine Vermutung, dass es false zurückgibt, wenn es einen Fehler in der Zuweisung gibt.

    
Josh K 24.09.2010 21:58
quelle
0

Im Moment setzt dies el auf $("#pr_attr_plain_"+key) . Dies testet die Zuordnung. Dies würde True zurückgeben, es sei denn, $() schlägt fehl und gibt null , false oder 0 zurück.

    
Just Jake 24.09.2010 21:59
quelle
0

Die Zuweisung in einer if -Anweisung ist nicht so gebräuchlich, aber in einigen Sprachen, die sie unterstützen, taucht sie auf und wird oft verwendet, um Code prägnanter zu machen.

Normalerweise ist es für Situationen reserviert, in denen Sie einer Zwischenvariablen einen Wert zuweisen wollen, um sie auf "Wahrheit" zu testen und dann etwas anderes damit zu tun. Also zum Beispiel:

%Vor%

.. ist ein bisschen kürzer als die Alternative:

%Vor%

Leider erlaubt Javascript das var Schlüsselwort in einer if Anweisung nicht (dh, if (var foo = bar) ist ein Syntaxfehler), was bedeutet, dass Sie sowieso eine Variable vorn deklarieren müssen (oder schlimmer noch, verwenden Sie eine globale Variable).

Ich sehe es in Perl auch ziemlich gut, da es auch die Variable auf den lexikalischen Bereich von if beschränkt. Das ist wiederum etwas, das Javascript nicht kann (nun, Unterstützung für let wird da).

    
Dan 24.09.2010 22:59
quelle

Tags und Links