Javascript: comportamiento extraño `cadena vacía` Y` falso` devuelve cadena vacía

Hoy encontré el extraño comportamiento en Javascript. A continuación está el código

return "" && false 

devoluciones "".

¿Por qué se comporta así?

Porque

La producción LogicalANDExpression: LogicalANDExpression & amp; BitwiseORExpression se evalúa de la siguiente manera:

  1. Deje que lref sea el resultado de evaluar LogicalANDExpression.
  2. Deje lval ser GetValue (lref).
  3. Si ToBoolean (lval) es falso, devuelve lval.
  4. Deje que rref sea el resultado de evaluar BitwiseORExpression.
  5. Devuelve GetValue (rref).

ECMAScript 5.1

Esto significa:

Devuelve el primer valor si es falso, devuelve el segundo valor si el primero es verdadero.


Este es también el comportamiento visto si lo hace:

 return false && true 

Obtienes false .

Esto significa también que esto

 return 23 && "Hello" 

te daría "Hola"

El LHS se ejecuta primero y el retorno lo deja fuera de la function