Alguien dijo una vez que un programa realmente bueno no tiene si ... else, por supuesto, el cambio no es tan bueno como si ... else. El uso del interruptor está prohibido en la especificación JS.
El objeto de comando resuelve perfectamente este problema.
Cita un blog extranjero:
JavaScript tiene buenas declaraciones de flujo de control, que a menudo se envuelven en aparatos ortopédicos. Pero hay una excepción: Switch ... Declaración de casos. Lo extraño de Switch ... el caso es que debe agregar la ruptura de palabras clave al final de cada caso para evitar que el control del proceso viaje hasta la siguiente declaración de caso. El viaje en el tiempo se refiere al método para permitir que se ejecuten múltiples casos. Cuando no se encuentra el descanso esperado, el control se entregará automáticamente al siguiente caso. Sin embargo, al igual que las semicolones y los aparatos ortopédicos rizados, inadvertidamente puede olvidarse de escribir descansos. Cuando esto sucede, las verificaciones de errores posteriores son más dolorosas porque la declaración en sí es correcta. Por lo tanto, es un buen hábito escribir un caso ... romper en parejas.
Por lo general, decimos que JavaScript tiene literales de objetos elegantes y funciones de nivel superior, que hacen que las consultas de métodos específicas sean muy simples. El objeto creado para consultas de métodos, lo llamamos un objeto activo o un objeto de comando, que se utiliza en muchos patrones de diseño de software, incluidos patrones de comando potentes y útiles.
Ejemplo:
La copia del código es la siguiente:
// Método de conmutación
función testSwitch (nombre) {
Switch (nombre) {
Caso '1':
return 'hack';
romper;
Caso '2':
regresar 'Slash';
romper;
Caso '3':
regresar 'run';
romper;
por defecto:
devolver falso;
romper;
}
}
// usa el objeto de comando
función testfn (nombre) {
nombres var = {
'1': function () {
return 'hack';
},
'2': function () {
regresar 'Slash';
},
'3': function () {
regresar 'run';
}
};
if (typeof nombres [nombre]! == 'function') {
devolver falso;
}
devolver nombres [nombre] ();
}
// Resultados de prueba
VAR result1 = testSwitch ('1');
VAR result2 = testfn ('2');
console.info (resultado1, resultado2);