Apply your JS skills to key Mozilla projects as an MDN Fellow! http://mzl.la/MDNFellowship

mozilla
Los resultados de tu búsqueda

    Sentencias de bucle

     

    Sentencias de bucle

    Un bucle es una serie de comandos que se ejecutan hasta que se encuentra una condición especificada. JavaScript soporta las sentencias for, do while y while loop, así como label (label no es una sentencia de bucle, pero es frecuentemente usada con estas sentencias). En adición, también puede utilizar las sentencias break y continue con sentencias de bucle.

    Otra sentencia, for...in, ejecuta sentencias repetidamente pero es utilizada para la manipulación de objetos. Véase Sentencias de manipulación de objetos.

    Las sentencias de bucle son:

    for

    Un blucle for se repite hasta que una condición específica se evalúe como falsa. El bucle JavaScript for es similar a los bucles for en Java y C. Una sentencia for se parece a lo que sigue:

    for ([Expresióninicial]; [condición]; [incrementodelaExpresión])
       sentencia
    

    Cuando un blucle for se ejecuta, ocurre lo siguiente:

    1. La expresión iniciadora Expresióninicial, si hay una, es ejecutada. Esta expresión usualmente inicia uno o más contadores del bucle, pero la sintaxis permite una expresión de cualquier grado de complejidad. Esta expresión también declara variables.
    2. La expresión condición es evaluada. Sí el valor de la condición es verdadero, las sentencias del bucle se ejecutan. Sí el valor de la condición es falso, el bucle for termina. Sí la expresión condición es omitida por entero, la condición es asumida como verdadera.
    3. La expresión sentencia se ejecuta. Para ejecutar sentencias múltiples, utilice un bloque de sentencias ({ ... }) para agruparlas.
    4. La expresión de actualización incrementodelaExpresión, si hay alguna, se ejecuta y el control retorna al paso 2.

    Ejemplo:
    La siguiente función contiene una sentencia for que cuenta el número de opciones seleccionadas en una lista desplegable (un objeto Select que permite múltiples selecciones). La sentencia for declara la variable i y la inicia en cero. El bucle verifica que la variable i sea menor que el númeo de opciones del objeto Select, desarrollando las sentencias if suscesivamente e incrementado i en uno después de cada pasada a travéz del bucle.

    <script>
    
    function cuantos(objetoSelect) {
       var numeroSeleccionados = 0;
       for (var i = 0; i < objetoSelect.options.length; i++) {
          if (objetoSelect.options[i].selected)
             numeroSeleccionados++;
       }
       return numeroSeleccionados;
    }
    
    </script>
    <form name="selectForm">
       <p>
          <strong>Escoja algunos tipos de música, luego haga clic en el botón de abajo:</strong>
          <br/>
          <select name="tiposdeMusica" multiple="multiple">
             <option selected="selected">R&B</option>
             <option>Jazz</option>
             <option>Blues</option>
             <option>New Age</option>
             <option>Classical</option>
             <option>Opera</option>
          </select>
       </p>
       <p>
          <input type="button" value="¿Cuántos son seleccionados?"
             onclick="alert ('Número de opciones seleccionadas: ' + cuantos(document.selectForm.tiposdeMusica))"/>
       </p>
    </form>
    

    do...while

    La sentencia do...while repite sentencias hasta que una especificación condicionada se evalúe como falsa. Una sentencia do...while se parece a lo siguiente:

    do
       sentencia
    while (condición);
    

    La sentencia se ejecuta al menos una vez antes de que la condición sea verificada. Para múltiples sentencias, utilice un bloque de sentencias para agruparlas ({ ... }). Sí la condición es verdadera, la sentencia se ejecuta nuevamente. Al final de cada ejecución , la condición es verificada. Cuando la condición es falsa, la ejecución pasa el control a la siguiente sentencia después de do...while.

    Ejemplo
    En el siguiente ejemplo, el bucle [do loop] iteratúa (iteraciones, repeticiones) al menos una vez y se reiteratúa hasta que i ya no sea menor que 5.

    do {
       i += 1;
       document.write(i);
    } while (i < 5);
    

    while

    Una sentencia while ejecuta sus sentencias mientras una condición especificada sea evaluada como verdadera. Una sentencia while se parece a lo siguiente:

    while (condición)
       sentencia
    

    Si la condición llega a ser falsa, la sentencia dentro del bucle para la ejecución y el control pasa a la sentencia siguiente luego del bucle.

    La condición de prueba ocurre antes que la sentencia en el bucle sea ejecutada. Si la condición retorna verdadero, la sentencia es ejecutada y la condición es probada nuevamente. Si la condición retorna falso, la ejecución se para y el control es pasado a la siguiente sentencia después del bucle while.

    Para ejecutar múltiples sentencias, utilice los bloques de sentencias ({ ... }) para agruparlas.

    Ejemplo 1:
    El siguiente bucle while iteratúa mientras que n sea menor que tres:

    n = 0;
    x = 0;
    while (n < 3) {
       n++;
       x += n;
    }
    

    Con cada iteración, el bucle se incrementa por n y añade el valor a x. Sin embargo, x y n toman los siguientes valores:

    • Después de la primera pasada: n = 1 y x = 1
    • Después de la segunda pasada: n = 2 y x = 3
    • Después de la tercera pasada: n = 3 y x = 6

    Después de completarse la tercera pasada, la condición n < 3 ya no es más verdadera, así que el bucle termina.

    Ejemplo 2:
    Evite bucles infinitos. Asegúrese que la condición dentro de un bucle eventualmente llegue a ser falsa; caso contrario, el bucle nunca terminará. La sentencia en el siguiente bucle while se ejecutará por siempre porque la condición nunca llega a ser falsa:

    while (true) {
       alert("Hola, mundo");
    }
    

    label

    Una etiqueta [label] provee a una sentencia de un identificador que le permite referirse a la misma en cualquier lugar de su programa. Por ejemplo, puede utilizar una etiqueta para identificar un bucle y luego utilizar las sentencias break o continue para indicar que por cualesquiera de ellas un programa debe interrumpir el bucle o continuar su ejecución respectivamente.

    La sintaxis de la sentencia label se parece a lo siguiente:

    etiqueta :
       sentencia
    

    El valor de etiqueta puede ser cualquier identificador JavaScript que no sea una palabra reservada. La sentencia que usted identifique con una etiqueta puede ser cualquier sentencia.

    Ejemplo:
    En este ejemplo, la etiqueta marcabucle identifica a un bucle while.

    marcabucle:
    while (laMarca == true)
       haga_algo();
    }
    

    break

    Utilice la sentencia break para terminar una sentencia loop, switch, o label.

    • Cuando utilice un break sin una etiqueta, ésta termina la sentencia cerrada más interna while, do-while, for, o switch immediatamente y transfiere el control a la siguiente sentencia.
    • Cuando utilice la sentencia break con una etiqueta, ésta termina la sentencia etiquetada especificada.

    La sintaxis de una sentencia break se parece a lo siguiente:

    1. break;
    2. break etiqueta;

    La primera forma de la sintaxis termina el bucle cerrado más interno o sentencia switch; la segunda forma de la sintaxis termina la sentencia etiquetada especificada.

    Ejemplo:
    El siguiente ejemplo iteratúa a través de los elementos de un arreglo hasta que éste encuentra el índice de un elemento cuyo valor es elValor:

    for (i = 0; i < a.length; i++) {
       if (a[i] == elValor)
          break;
    }
    

    Ejemplo 2: Breaking a una Etiqueta

    var x = 0;
    var z = 0
    labelCancelLoops: while (true) {
        console.log("Outer loops: " + x);
        x += 1;
        z = 1;
        while (true) {
            console.log("Inner loops: " + z);
            z += 1;
            if (z === 10 && x === 10) {
                break labelCancelLoops;
            } else if (z === 10) {
                break;
            }
        }
    }
    

    continue

    La sentencia continue puede ser utilizada para reiniciar una sentencia while, do-while, for, o label.

    • Cuando utilice continue sin una etiqueta, ésta termina la iteración actual de la sentencia cerrada más interna while, do-while o for y continua la ejecución del bucle con la siguiente iteración. En contraste con la sentencia break, continue no termina por entero la ejecución del bucle. En un bucle while, ésta retrocede hasta la condición mediante un salto. En un bucle for, ésta salta hasta la expresión de incremento.
    • Cuando utilice continue con una etiqueta [label], ésta se aplica a la sentencia de bucle identificada con la etiqueta label.

    La sintaxis de la sentencia continue se parece a lo siguiente:

    1. continue
    2. continue label

    Ejemplo 1:
    El siguiente ejemplo muestra un bucle while con una sentencia continue que se ejecuta cuando el valor de i es tres. Así, n toma los valores de uno, tres, siete y doce.

    i = 0;
    n = 0;
    while (i < 5) {
       i++;
       if (i == 3)
          continue;
       n += i;
    }
    

    Ejemplo 2:
    Una sentencia etiquetada chequea_por_iyj contiene una sentencia etiquetada como chequea_por_j. Si un sentencia continue es encontrada, el programa termina la iteración actual de chequea_por_j y comienza la siguiente iteración. Cada vez que la sentencia continue es encontrada, chequea_por_j se reitera hasta que su condición retorne falso. Cuando un valor de falso es retornado, el resto de la sentencia chequea_por_iyj es completado y chequea_por_iyj se reitera hasta que su condición retorne falso. Cuando el valor de falso es retornado, el programa continua con la sentencia siguiente despúes de chequea_por_iyj.

    Si la sentencia continue tuviese una etiqueta chequea_por_iyj, el programa debería continuar al inicio de la sentencia chequea_por_iyj.

    chequea_por_iyj :
       while (i < 4) {
          document.write(i + "<br/>");
          i += 1;
          chequea_por_j :
             while (j > 4) {
                document.write(j + "<br/>");
                j -= 1;
                if ((j % 2) == 0)
                   continue chequea_por_j;
                document.write(j + " es impar.<br/>");
             }
          document.write("i = " + i + "<br/>");
          document.write("j = " + j + "<br/>");
       }
    

     

    Etiquetas y colaboradores del documento

    Contributors to this page: Sheppy, Nathymig, acamposg71, teoli, MrMayLibrids, DSN XP, Nemesisx666, Mgjbot
    Última actualización por: acamposg71,