Cita: var tipo_caracter = Math.floor(Math.random() * 4);
//Si numero = 1 Mayuscula, 2 Minuscula, 3 numero
//Aqui puede dar 0 que tipo de caracter pones en eses caso.
Estabas suponiendo que Math.floor(Math.random() * 4); solo podia dar 1,2 o 3 y no es cierto, puesto que puede dar 0. Al poner el case 0: estas dando un resultado para los casos en que es cero... asi de simple.... ya te puse el comentario
//Así seria lo mismo que 1 ya que no hay un break; si es cero hace lo mismo que si es 1.