Switch Case no muestra resultados correctos

2 minutos de lectura

avatar de usuario
Marc André Jiacarrini

Aquí está mi guión

var marks = 11;
switch (marks) {
  case (marks < 20):
    console.log('Yes Freaking Failed');
    break;
  case (marks > 20):
    console.log('Ahh Its Ok');
    break;
  case (marks > 80):
    console.log('Whooping');
    break;
  default:
    console.log('Cant say u maybe Flunked');
    break;
}

Creo que debería mostrar 'Yes Freaking Failed' porque las marcas son menos de 20. Pero se nota 'Cant say u maybe Flunked'

¿Porqué es eso?

  • no puede tener declaraciones condicionales en caso de cambio … use if else

    – Arun P Johny

    1 de mayo de 2015 a las 2:30

  • jsfiddle.net/arunpjohny/7qhxh31m/1

    – Arun P Johny

    1 de mayo de 2015 a las 2:32

Cuando escribes

switch (x) {
case(y):
    ...
}

es equivalente a probar

if (x == y) {
    ...
}

Asi que

case (marks < 20):

significa:

if (marks == (marks < 20)) {

no puedes usar case para pruebas de rango como esta, necesita usar una serie de if/else if:

if (marks < 20) {
    console.log('Yes Freaking Failed');
} else if (marks < 80) {
    console.log('Ahh Its OK');
} else {
    console.log('Whooping');
}

También tenga en cuenta que si funcionó de la manera que pensó, nunca podría ejecutarse marks > 80porque eso también coincidiría marks > 20y siempre se ejecuta el primer caso coincidente.

No hay necesidad de la Cant say u maybe flunked caso, porque no hay otras posibilidades.

Técnicamente no es posible. Javascript lo hace así.

Si necesita comparar, use if/else if/else.

Los casos de cambio son para cuando sabe que tendrá valores específicos.

var marks=11;
    switch(marks){
        case (11):
        console.log('It would go in here');
        break;
        case (42):
        console.log('If equal to 42');
        break;
        case (80):
        console.log('if equal to 80.');            
        break;

        default:
        console.log('Cant say u maybe Flunked');
        break;
    }

Su código es equivalente a:

var marks=11;
switch(marks){
    case (true):
    console.log('Yes Freaking Failed');
    break;
    case (false):
    console.log('Ahh Its Ok');
    break;
    case (false):
    console.log('Whooping');    
    break;          
    default:
    console.log('Cant say u maybe Flunked');
    break;
}

marks no es true y no es false – asi que switch va a default.

cuando usa la declaración de cambio, está evaluando marcas y comparando los valores de las marcas con los casos. Y tienes los siguientes casos: 1, 0, 0, por defecto. Es porque (marks<20) se evalúa como verdadero, que es 1, y los otros dos son falsos, que es 0. Por lo tanto, debe hacer if y else if en su caso.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad