No piense en ello como un control- bloque (es decir, un if-else o un interruptor). No es realmente para ejecutar código dentro de él.
Puedes. Simplemente se pone muy feo, muy rápido, lo que frustra el propósito.
Lo que realmente quiere utilizarlo para es la asignación de valores.
Tomando su ejemplo inicial y convertirlo en su cabeza un poco, se obtiene:
direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";
Sede. Ahora lo que hice fue tomar algo que hubiera requerido un if/else o un switch, que se habría usado para asignar ese valor, y lo he limpiado bonito y bonito.
Incluso se puede hacer una cosa: si el tipo de ternario:
y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;
También se puede utilizar para disparar código, si lo desea, pero se hace muy difícil después de un tiempo, saber lo que está donde va (véase el ejemplo anterior para ver cómo incluso asignación puede comenzar a mirar raro de un vistazo) ...
((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));
... esto normalmente funcionará.
Pero en realidad no es más bonita ni más útil que una función if o de bifurcación e invocación inmediata (y los programadores no JS, o los programadores JS no entrenados se van a fastidiar tratando de mantener el código).
El término técnico para estos fragmentos son _expresiones condicionales_, que utilizan el operador condicional_ '?:'. Como este operador toma tres operandos, se llama operador ternario. –
2 veces más rápido http://jsperf.com/speed-test-for-conditions –