Rolf B: VS Code - Code als minimierten Code kopieren

Beitrag lesen

Hallo Martin,

Aber was meinst du damit?

Der ternäre Operator ist ein Werkzeug der Minifizierer, ja.

Ein anderes ist der Umstand, dass die booleschen Operatoren in JavaScript genau das nicht sind, sondern "boolesy" funktionieren.

In JS gilt nicht die klassische Wahrheitstabelle beim Auflösen von && und ||. Statt dessen selektieren die Operatoren einen ihrer beiden Operanden, je nach dem Wert des linken Operanden.

a && b ergibt a, wenn a falsy ist und b, wenn a truthy ist
a || b ergibt b, wenn a falsy ist und a, wenn a truthy ist

Das Ergebnis ist die bekannte Wahrheitstabelle, wenn man TRUE und FALSE für a und b einsetzt, aber weil es in JS mehr Wahr und Falsch als TRUE und FALSE gibt, kann man das ausnutzen.

let b;
if (a && a.fooProp) {
   b = a.fooProp;
}
else
{
   b = "Kein Wert vorhanden";
}
// -------------
let b = a && a.fooProp || "Kein Wert vorhanden";

Unter dem Strich passiert das gleiche wie drüber (hoffe ich 😂)

Der ternäre Operator wird aber erst richtig schick, wenn man noch den Kommaoperator in die Suppe rührt (x,y,z ergibt z). Dann kommt sowas dabei raus:

if (pi == 3.14) {
   daumen = 9;
   hugo = 3;
   otto = 17;
   return 4:
}
else {
   daumen = 0;
   hugo = 1;
   return 0;
} 
// ----------------
return pi==3.14?(daumen=9,hugo=3,otto=17,4):(daumen=0,hugo=1,0);

Ich glaube, die Klammern kann man sogar weglassen, weil ?: höhere Prio hat als das Komma. Und das ,0 im zweiten Teil könnte man durch Umordnen auch noch loswerden, was aber nebenwirkungsfreie Einzelschritte verlangt.

Rolf

--
sumpsi - posui - obstruxi