Ternärer ? Operator in JavaScript
Vor einiger Zeit habe ich durch Zufall entdeckt, dass der ternäre ? Operator in JavaScript mehr kann, als ich bis jetzt dachte. Als Entwickler kennt man diesen ja bereits aus anderen Programmiersprachen als Abkürzung für einfach if-then-else Ausdrücke. In JavaScript kann man damit aber noch ein wenig mehr ausdrücken.
Der Klassiker ist die bedingte Zuweisung:
var CUSTOMER_TYPE = ‘C’;
var loginPath = (type === CUSTOMER_TYPE) ?
‘/customer.html’ : ‘/prospective.html’;
Dann kann man natürlich auch bedingt Code ausführen, ohne eine Zuweisung durchzuführen:
var CUSTOMER_TYPE = ‘C’;
(type === CUSTOMER_TYPE) ?
validate(customerId) : validate(prospectiveId);
Und, das war neu für mich, man kann auch mehr als eine Anweisung je Pfad ausführen:
var CUSTOMER_TYPE = ‘C’;
(type === CUSTOMER_TYPE) ?
(validate(customerId), showResult()) :
(validate(prospectiveId), showError());
Diese müssen in Klammern gepackt mit Komma voneinander getrennt werden.
Und dann war da noch: Bei der Verwendung in einer Zuweisung wird immer der letzte Wert in einem Pfad zugewiesen:
var CUSTOMER_TYPE = ‘C’;
var loginPath = (type === CUSTOMER_TYPE) ?
(validate(customerId), ‘/customer.html’) :
(validate(prospectiveId), ‘/prospective.html’);
Also an dieser Stelle entweder ‘/customer.html’ bzw. ‘/prospective.html’.
Mehr dazu unter MDN.