without ternario operator operador multiple else javascript ternary-operator jslint jshint

ternario - ternary operator javascript without else



Expresiones en JavaScript Ternary Operator y JSLint (1)

Hace poco recibí un comentario en una de las publicaciones de mi blog sobre JSLint preguntando por qué JSLint lanzó un error con lo siguiente:

s === "test" ? MyFunc() : MyFunc2();

El error generado fue:

"Se esperaba una asignación de función o llamada de función y, en cambio, se veía una expresión".

Claramente JSLint está esperando una asignación aquí, algo más como:

var y = (s === "test") ? MyFunc() : MyFunc2();

Pero, realmente no veo el problema con el primer ejemplo. ¿Es realmente el caso que los operadores ternarios solo deben usarse para tareas?

No pude ver nada en JSLint.com , ni hubo nada aparente en el libro JavaScript: The Good Parts. Y, el mismo error también se informa en la bifurcación comunitaria JSHint .

¿Nadie?


Es una expresión. Es equivalente a escribir

0 === 1;

Estás escribiendo una expresión que tiene efectos secundarios inmediatos y eso se considera malo.

Generalmente las expresiones son declaraciones inútiles que no tienen ningún efecto secundario. Se considera mejor forma de hacer simplemente.

if (s === "test") { MyFunc(); } else { MyFunc2(); }

Aparte de eso es perfectamente sintaxis sólida. Personalmente estoy de acuerdo en que escribir un ternario conciso como una alternativa a un if es malo y es mejor que lo uses solo para la asignación.

Otra expresión corta de la mano que se ha utilizado (ab) para la tersura

someCondition && doMagic(magic); someCondition || doMagic(magic);

Nuevamente, estos se consideran de mala forma si se usan solo como expresiones, ya que al usarlas solo se oculta la lógica y se hace más difícil mantener el código.

JSHint tiene una opción expr para esto. Ver ticket

Corriendo:

/*jshint expr: true */ var s, MyFunc, MyFunc2; s === "test" ? MyFunc() : MyFunc2(); 0 === 1;

Pasará