¿Puedo escribir la if else
taquigrafía sin el else
?
var x=1;
x==2 ? dosomething() : doNothingButContinueCode();
He notado que poner null
para lo demás 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.
var | var
sintaxis. Cuidado ya que es potencialmente difícil "ver", especialmente los ternarios (IMO) que son problemáticos. Utilizar con moderación.:)
foo = bar | cat;
, ¿dónde si el primero es falso? nulo ?, se "cae" al segundo. Sin embargo, solo lo he visto y no lo uso.a || b
oa && b
, de lo contrariob
, siempre se evaluará.Respuestas:
Esta también es una opción:
dosomething()
solo se llamará six==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:
Debe escribir 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, el compilador de cierre de Google )
fuente
if (1 - 1 === 0) $('.woot').text('Woot!');
uso ese formulario todo el tiempo con PHP, y ahora que estoy adoptando Coffeescript, también lo uso en mi Javascript.if x==2 && doSomething() || doSomethingElse()
doSomething() if x === 2
. No extraño a Ruby, pero sí extraño eso.Lo que tiene es un uso bastante inusual del operador ternario . Por lo general, se usa como una expresión, no como una declaración, dentro de alguna otra operación, por ejemplo:
Entonces, para facilitar la lectura (porque lo que está haciendo es inusual), y porque evita el "más" que no desea, sugeriría:
fuente
Otra opción:
fuente
Si no estás haciendo lo demás, ¿por qué no hacerlo?
fuente
Usar
null
está bien para una de las ramas de una expresión ternaria. Y una expresión ternaria está bien como una declaración en Javascript.Sin embargo, como cuestión de estilo, si tiene en mente invocar un procedimiento, es más claro escribirlo usando if..else:
o, en tu caso,
fuente
Pequeña adición a este hilo muy antiguo.
Si estás por la evaluación de una expresión dentro de un
for
/while
bucle con un operador ternario, y quierencontinue
obreak
como resultado - vas a tener un problema porque los doscontinue
ybreak
no son expresiones , son declaraciones sin ningún valor.Esto producirá
Uncaught SyntaxError: Unexpected token continue
Si realmente desea una línea que devuelva una declaración, puede usar esto en su lugar:
fuente
Técnicamente, poner nulo o 0, o solo algún valor aleatorio allí funciona (ya que no está utilizando el valor de retorno). Sin embargo, ¿por qué estás usando esta construcción en lugar de la
if
construcción? Es menos obvio lo que intenta hacer cuando escribe código de esta manera, ya que puede confundir a las personas con el no-op (nulo en su caso).fuente
Probablemente el más corto (basado en el operador OR y su precedencia )
Mostrar fragmento de código
fuente