Siempre he tenido que poner null
las condiciones que no tienen nada. ¿Hay alguna manera de evitarlo? P.ej
condition ? x = true : null;
Básicamente, ¿hay alguna manera de hacerlo?
condition ? x = true;
Ahora aparece como un error de sintaxis
Para su información, aquí hay un código de ejemplo real:
!defaults.slideshowWidth ? defaults.slideshowWidth = obj.find('img').width()+'px' : null;
javascript
optimization
syntax-error
Oscar Godson
fuente
fuente
condition ? x = true : null;
probablemente debería escribirse comox = (condition ? true : null);
. Por otro lado, en javascript senull
evalúa como falso, por lo que en ESTE caso podríax = (condition);
lograr el mismo resultado.if (!defaults.slideshowWidth) defaults.slideshowWidth = obj.find('img').width()+'px'
Respuestas:
En primer lugar, una expresión ternaria no es un reemplazo para una construcción if / else, es un equivalente a una construcción if / else que devuelve un valor. Es decir, una cláusula if / else es código, una expresión ternaria es una expresión , lo que significa que devuelve un valor.
Esto significa varias cosas:
=
que se le asignará el valor de retornox = true
devuelve verdadero ya que todas las expresiones devuelven el último valor, pero también cambia x sin que x tenga ningún efecto en el valor devuelto)En resumen: el uso 'correcto' de una expresión ternaria es
En lugar de su ejemplo
condition ? x=true : null ;
, donde usa una expresión ternaria para establecer el valor dex
, puede usar esto:Esto sigue siendo una expresión y, por lo tanto, podría no pasar la validación, por lo que un enfoque aún mejor sería
El último pasará la validación.
Pero, de nuevo, si el valor esperado es un valor booleano, simplemente use el resultado de la expresión de condición en sí
ACTUALIZACIÓN En relación con su muestra, esto probablemente sea más apropiado:
fuente
i/else
errores tipográficos, ya que no hay suficientes caracteres.void()
. Gracias.No, necesita tres operandos. Por eso se llaman ternarios operadores .
Sin embargo, para lo que tiene como ejemplo, puede hacer esto:
Aunque es más seguro tener llaves si necesita agregar más de una declaración en el futuro:
Editar: ahora que menciona el código real en el que se aplica su pregunta:
fuente
Con mayor frecuencia, las personas utilizan operadores lógicos para acortar la sintaxis de la declaración:
Pero en su caso particular, la sintaxis puede ser aún más simple
Este código devolverá el
defaults.slideshowWidth
valor sidefaults.slideshowWidth
se evalúa como verdadero yobj.find('img').width()+'px'
valor de lo contrario.Consulte la Evaluación de cortocircuito de operadores lógicos para obtener más detalles.
fuente
fuente
(defaults.slideshowWidth) || (defaults.slideshowWidth = obj.find('img').width()+'px')
odefaults.slideshowWidth = defaults.slideshowWidth || (obj.find('img').width()+'px')
Podrías escribir
De modo que x no se modifica cuando la condición es falsa.
Esto es equivalente a
EDITAR:
Hay un par de alternativas, no digo que sean mejores o peores, simplemente alternativas
Pasar nulo como el tercer parámetro funciona porque el valor existente es nulo. Si refactoriza y cambia la condición, existe el peligro de que esto ya no sea cierto. Transmitir el valor existente como la segunda opción en los guardias ternarios contra esto:
Más seguro, pero quizás no tan agradable a la vista, y más mecanografía. En la práctica, probablemente escribiría
fuente
En su caso, veo al operador ternario como redundante. Puede asignar la variable directamente a la expresión, utilizando los operadores ||, &&.
se convertirá :
Está más claro, es más estilo "javascript".
fuente
¿Qué tal simplemente?
fuente
Para usar un operador ternario sin otra cosa dentro de una declaración de matriz u objeto, puede usar el operador de propagación ES6
...()
Y para objetos:
fuente original
fuente