Expresión dentro de la declaración de caso de cambio

Resuelto Marko asked hace 14 años • 8 respuestas

Estoy intentando crear una declaración de cambio, pero parece que no puedo usar una expresión que se evalúe (en lugar de una cadena/número entero establecido). Puedo hacer esto fácilmente con declaraciones if, pero espero que el caso sea más rápido.

Estoy intentando lo siguiente

function reward(amount) {
    var $reward = $("#reward");
    switch (amount) {
        case (amount >= 7500 && amount < 10000):
            $reward.text("Play Station 3");
            break;
        case (amount >= 10000 && amount < 15000):
            $reward.text("XBOX 360");
            break;
        case (amount >= 15000):
            $reward.text("iMac");
            break;
        default:
            $reward.text("No reward");
            break;
    }
}

¿Me estoy perdiendo algo obvio o no es posible? Google no ha sido amigable en este caso.

Se agradece cualquier ayuda/consejos.

METRO

Marko avatar Aug 12 '10 07:08 Marko
Aceptado

amountes un número, pero las expresiones en las casecláusulas solo se evalúan como booleanas; los valores nunca coincidirán.

siempre podrías hacer

switch (true) {
  case (amount >= 7500 && amount < 10000):
    // Code
    break;
  case (amount >= 10000 && amount < 15000):
    // Code
    break;
  // etc.
}

Funciona porque el valor que se compara ahora es booleano , por lo que se ejecutará trueel código bajo la primera casecláusula con una expresión que se evalúa .true

Supongo que es un poco “complicado”, pero no veo nada malo en usarlo. Una declaración simple ifprobablemente elsesería más concisa y no tendría que preocuparse por errores accidentales. Pero ahí está de todos modos.

MooGoo avatar Aug 12 '2010 00:08 MooGoo

Un bloque no switchfunciona así. Se caseutiliza para contener un valor único que si es igual al valor en la switchlínea. if-elseLas declaraciones le serán de gran utilidad.

Aquí hay información sobre el switchbloque.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch

Daniel A. White avatar Aug 12 '2010 00:08 Daniel A. White