operadores logicos comparacion javascript syntax if-statement boolean syntactic-sugar

comparacion - operadores logicos javascript



¿Es<boolean expression> && statement() lo mismo que if(<boolean expression>) statement()? (4)

En una palabra no, las dos afirmaciones no son iguales, aunque en las circunstancias específicas que presenta el resultado es el mismo.

x && doSomething(); es una expresión, primero la x evaluada, porque esto es un AND y dado que x es verdadero, el segundo argumento ( doSomething() ) se evalúa. En este caso, esto significa que el método se ejecuta. Si x fuera falso, doSomething () no se ejecutaría ya que el resultado de la expresión no puede ser verdadero.

if(x) doSomething(); es una declaración. El valor de x se verifica y, si es verdadero, se ejecuta el alcance de la sentencia if.

He creado este violín para demostrar (con pequeñas modificaciones).

¿Son los dos idénticos?

Supongamos que tiene:

var x = true;

Y luego tienes uno de cualquiera:

x && doSomething();

o

if(x) doSomething();

¿Hay alguna diferencia entre las dos sintaxis? ¿Tropecé con un poco de azúcar?


Estrictamente hablando, producirán los mismos resultados, pero si usas el primer caso como condición para otra cosa, obtendrás resultados disímiles. Esto se debe a que en el caso de x && doSomething() , doSomething() devolverá un valor para indicar su éxito.


No, no son idénticos. Mientras que if es una declaración , el operador AND es una expresión .

Eso significa que puede usar su resultado en otra expresión, que no puede con una instrucción if:

var result = x && doSomething();

Sin embargo, en tu caso ambos tienen el mismo efecto. Use el que sea más legible y represente mejor la estructura de su programa; Yo recomendaría el enunciado if.


Respuesta corta: No.

Respuesta larga:

A declarado por @Steve x && doSomething() es una expresión ,

mientras que if(x) doSomething(); es una declaración ,

Como lo sugirieron @Daniel Li y @Bergi, piense:

  • una expresión se calcula (se supone que devuelve un valor aquí ).

  • se declara una declaración ( no se supone que devuelva un valor aquí , piense en los efectos secundarios ).

¿Por qué es confuso?

  • JS nos permite escribir ( thatExpression );
  • JS nos permite escribir thatExpression;

ambos suponiendo algún tipo de instrucción doNothingWithValueOf .

¿Como escoger?

Lo usas:

  • doSomething() como un
    • expresión, piense IsMyObjectWhatever() o MyObjectComputedValue() ,
    • o como una afirmación, piense en ModifyMyObject()

Y luego: ¿ x && doSomething() como expresión ?

Terminarás pensando algo como thisStatement( thatExpression ); en todas partes, piensa:

  • () expresión,
  • ; declaración.

Entonces, ¿por qué debería elegir?