solucionar - replace html javascript
javascript taquigrafía if, sin la porción else (6)
Entonces, estoy usando una declaración abreviada javascript if
/ else
(¿Leí en alguna parte que se llaman declaraciones de Ternary?)
this.dragHandle.hasClass(''handle-low'') ? direction = "left" : direction = "right"
Esto funciona muy bien, pero qué pasa si más adelante quiero usar solo una abreviatura if
, sin la porción else
. Me gusta:
direction == "right" ? slideOffset += $(".range-slide").width()
¿Es esto posible?
El operador condicional no es una abreviatura de la declaración if
. Es un operador, no una declaración.
Si lo usa, debe usarlo como operador, no como una declaración.
Simplemente use un valor cero para el tercer operando:
slideOffset += direction == "right" ? $(".range-slide").width() : 0;
Esto no responde exactamente a su pregunta, pero los términos le permiten escribir menos de lo que ha mostrado:
direction = this.dragHandle.hasClass(''handle-low'') ? "left" : "right";
Y ahora que lo pienso, sí, tú también puedes hacer tu pregunta:
slideOffset + direction == "right" ? = $(".range-slide").width() : = 0;
Esta es una teoría La próxima vez que tenga la oportunidad de +=
un ternario intentaré esto. ¡Déjame saber cómo funciona!
Lo que tienes no funcionará, pero ¿por qué no usar una declaración if de una sola línea?
if(direction == "right") slideOffset += $(".range-slide").width();
Esto implica menos tipeo que el método sugerido por Ray. Por supuesto, su respuesta es válida si realmente quiere apegarse a ese formato.
No lo piense como un bloque de control (es decir, un if-else o un interruptor). En realidad, no está destinado a ejecutar código dentro de él.
Usted puede. Simplemente se pone muy feo, muy rápido, lo que frustra el propósito.
Lo que realmente quieres usar es ASIGNAR VALORES .
Tomando tu ejemplo inicial y volviéndolo un poco en su cabeza, obtienes:
direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";
Ver. 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 puedes hacer un tipo de ternario else-if:
y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;
También puede usarlo para disparar código, si lo desea, pero se vuelve realmente difícil después de un tiempo, para saber qué es lo que pasa (vea el ejemplo anterior para ver cómo incluso la asignación puede comenzar a parecer extraña de un vistazo) ...
((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));
... esto generalmente funcionará.
Pero en realidad no es más bonita ni más útil que una función de invocación inmediata o de invocación (o de programadores no JS, o programadores JS no entrenados que se van a fastidiar tratando de mantener el código).
No, esto no es posible, porque el operador ternario requiere, tres operandos con él.
first-operand ? second-operand (if first evaluates to true) : third-operand (if false)
puede usar & operador & - la segunda expresión del operando se ejecuta solo si primero es verdadero
direction == "right" && slideOffset += $(".range-slide").width()
en mi opinión, if(conditon) expression
es más legible que la condition && expression