Omitir la segunda expresión cuando se utiliza la taquigrafía if-else

¿Puedo escribir la taquigrafía ‘if else’ sin el else?

var x=1; x==2 ? dosomething() : doNothingButContinueCode(); 

Me he dado cuenta de que poner null para el rest funciona (pero no tengo idea de por qué o si es una buena idea).

Editar: Algunos de ustedes parecen desconcertados por qué me molestaría en intentar esto. Tenga la seguridad de que es puramente por curiosidad. Me gusta jugar con JavaScript.

Esta es también una opción:

 x==2 && dosomething(); 

dosomething() solo se dosomething() si x==2 se evalúa como verdadero. Esto se llama cortocircuito .

No se usa comúnmente en casos como este y realmente no debería escribir código como este. Animo este enfoque más simple:

 if(x==2) dosomething(); 

Debe escribir un código legible en todo momento; si le preocupa el tamaño del archivo, simplemente cree una versión reducida con la ayuda de uno de los muchos compresores JS. (por ejemplo, comstackdor de cierre de Google)

Lo que tienes es un uso bastante inusual del operador ternario . Por lo general, se utiliza como una expresión, no como una statement, dentro de alguna otra operación, por ejemplo:

 var y = (x == 2 ? "yes" : "no"); 

Entonces, para la legibilidad (porque lo que estás haciendo es inusual), y porque evita el “else” que no quieres, te sugiero:

 if (x==2) doSomething(); 

Otra opción:

 x === 2 ? doSomething() : void 0; 

Si no estás haciendo lo demás, ¿por qué no hacerlo?

 if (x==2) doSomething(); 

Usar null está bien para una de las twigs de una expresión ternaria. Y una expresión ternaria está bien como una statement en Javascript.

Sin embargo, como una cuestión de estilo, si tiene en mente invocar un procedimiento, es más claro escribir esto usando if..else:

 if (x==2) doSomething; else doSomethingElse 

o, en tu caso,

 if (x==2) doSomething; 

Una pequeña adición a este hilo muy, muy viejo.

Digamos que está dentro de un bucle for y necesita evaluar una variable para un valor de truthy/falsy con un operador ternario, mientras que en caso de que sea falsy , quiere continue ; tendrá un problema porque no devuelve una expresión , en su lugar, devuelve una statement sin ningún valor.

Esto producirá Uncaught SyntaxError: Unexpected token continue

  for (var i = 0; i < myArray.length; i++) { myArray[i].value ? alert('yay') : continue; } 

Por lo tanto, si desea devolver un extracto y aún usar una línea para su código, aunque a primera vista puede parecer un poco extraño y puede no seguir un uso estricto del idioma, puede hacerlo en su lugar:

  for (var i = 0; i < myArray.length; i++) { if (myArray[i].value) alert('yay') ; else continue; } 
  • PD: este código puede ser difícil de leer o comprender, por lo que no siempre será la mejor opción para usar. Solo digo.. 🙂

Técnicamente, poner nulo o 0, o simplemente algún valor aleatorio funciona (ya que no está utilizando el valor de retorno). Sin embargo, ¿por qué estás usando esta construcción en lugar de la construcción if ? Es menos obvio lo que intenta hacer cuando escribe el código de esta manera, ya que puede confundir a las personas con no-op (nulo en su caso).