Szukaj…


Składnia

  • for ( inicjalizacja ; warunek ; wyrażenie_wyrażeniowe ) {}
  • dla ( klucz w obiekcie ) {}
  • dla ( zmienna iterowalna ) {}
  • while ( warunek ) {}
  • do {} while ( warunek )
  • dla każdego ( zmienna w obiekcie ) {} // ECMAScript for XML

Uwagi

Pętle w JavaScript zazwyczaj pomagają w rozwiązywaniu problemów związanych z powtarzaniem określonego kodu x razy. Powiedz, że musisz zalogować wiadomość 5 razy. Możesz to zrobić:

console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");

Ale to tylko czasochłonne i trochę śmieszne. A co jeśli trzeba zalogować ponad 300 wiadomości? Powinieneś zastąpić kod tradycyjną pętlą „for”:

for(var i = 0; i < 5; i++){
    console.log("a message");
}

Standardowe pętle „for”

Standardowe użycie

for (var i = 0; i < 100; i++) {
    console.log(i);
}

Oczekiwany wynik:

0
1
...
99

Wiele deklaracji

Powszechnie używane do buforowania długości tablicy.

var array = ['a', 'b', 'c'];
for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

Oczekiwany wynik:

'za'
'b'
'do'

Zmiana przyrostu

for (var i = 0; i < 100; i += 2 /* Can also be: i = i + 2 */) {
    console.log(i);
}

Oczekiwany wynik:

0
2)
4
...
98

Zmniejszona pętla

for (var i = 100; i >=0; i--) {
    console.log(i);
}

Oczekiwany wynik:

100
99
98
...
0

„while” Loops

Standardowa pętla While

Standardowa pętla while będzie wykonywana, dopóki podany warunek nie będzie fałszywy:

var i = 0;
while (i < 100) {
    console.log(i);
    i++;
}

Oczekiwany wynik:

0
1
...
99

Zmniejszona pętla

var i = 100;
while (i > 0) {
    console.log(i);
    i--; /* equivalent to i=i-1 */
}

Oczekiwany wynik:

100
99
98
...
1

Czy ... podczas Loop

Pętla do ... while będzie zawsze wykonywana co najmniej raz, niezależnie od tego, czy warunek jest prawdziwy, czy fałszywy:

var i = 101;
do {
    console.log(i);
} while (i < 100);

Oczekiwany wynik:

101

„Break” z pętli

Wyjście z pętli while

var i = 0;
while(true) {
    i++;
    if(i === 42) {
        break;
    }
}
console.log(i);

Oczekiwany wynik:

42

Wyjście z pętli for

var i;
for(i = 0; i < 100; i++) {
    if(i === 42) {
        break;
    }
}
console.log(i);

Oczekiwany wynik:

42

„kontynuuj” pętlę

Kontynuacja pętli „za”

Po umieszczeniu słowa kluczowego continue w pętli for wykonanie wykonuje skok do wyrażenia aktualizacji (w tym przykładzie i++ ):

for (var i = 0; i < 3; i++) {
    if (i === 1) {
        continue;
    }
    console.log(i);
}

Oczekiwany wynik:

0
2)

Kontynuacja pętli While

Podczas continue w pętli while wykonanie continue do warunku ( i < 3 w przykładzie):

var i = 0;
while (i < 3) {
    if (i === 1) {
        i = 2;
        continue;
    }
    console.log(i);
    i++;
}

Oczekiwany wynik:

0
2)

Pętla „do ... while”

var availableName;
do {
    availableName = getRandomName();
} while (isNameUsed(name));

do while pętla jest gwarantowana do pracy co najmniej raz, jak jest to warunek jest sprawdzany tylko na koniec iteracji. Tradycyjna while pętla może uruchomić zero lub więcej razy jako jej warunek jest sprawdzany na początku iteracji.

Przerwij określone zagnieżdżone pętle

Możemy nazwać nasze pętle i w razie potrzeby przerwać konkretną.

outerloop:
for (var i = 0;i<3;i++){
    innerloup:
    for (var j = 0;j <3; j++){
        console.log(i);
        console.log(j);
        if (j == 1){
            break outerloop;    
        }
    }
}

Wynik:

0
0
0
1

Rozbij i kontynuuj etykiety

Po instrukcjach Break i Continue może następować opcjonalna etykieta, która działa jak pewnego rodzaju instrukcja goto, wznawia wykonywanie od pozycji, do której odnosi się etykieta

for(var i = 0; i < 5; i++){
  nextLoop2Iteration:
  for(var j = 0; j < 5; j++){
    if(i == j) break nextLoop2Iteration;
    console.log(i, j);
  }
}

i = 0 j = 0 pomija pozostałe wartości j
1 0
i = 1 j = 1 pomija pozostałe wartości j
2 0
2 1 i = 2 j = 2 pomija pozostałe wartości j
3 0
3 1
3 2
i = 3 j = 3 pomija pozostałe wartości j
4 0
4 1
4 2
4 3
i = 4 j = 4 nie rejestruje się i pętle są zakończone

pętla „for… of”

6
const iterable = [0, 1, 2];
for (let i of iterable) {
    console.log(i);
}

Oczekiwany wynik:

0
1
2)

Zalety pętli for ... to:

  • Jest to jak dotąd najbardziej zwięzła, bezpośrednia składnia do zapętlania elementów tablicy
  • Pozwala uniknąć pułapek dla ... w
  • W przeciwieństwie do forEach() , działa z break, kontynuuj i return

Wsparcie dla ... z innych kolekcji

Smyczki

for ... of potraktuje ciąg jako ciąg znaków Unicode:

const string = "abc";
for (let chr of string) {
  console.log(chr);
}

Oczekiwany wynik:

a b c

Zestawy

do ... prac na obiektach Set .

Uwaga :

const names = ['bob', 'alejandro', 'zandra', 'anna', 'bob'];

const uniqueNames = new Set(names);

for (let name of uniqueNames) {
  console.log(name);
}

Oczekiwany wynik:

kok
alejandro
zandra
Ania

Mapy

Można również użyć do ... pętle iteracyjne nad Mapa s. Działa to podobnie do tablic i zestawów, z tą różnicą, że zmienna iteracyjna przechowuje zarówno klucz, jak i wartość.

const map = new Map()
  .set('abc', 1)
  .set('def', 2)

for (const iteration of map) {
  console.log(iteration) //will log ['abc', 1] and then ['def', 2]
}

Możesz użyć przypisania destrukcyjnego do przechwycenia klucza i wartości osobno:

const map = new Map()
  .set('abc', 1)
  .set('def', 2)

for (const [key, value] of map) {
  console.log(key + ' is mapped to ' + value)
}
/*Logs:
  abc is mapped to 1
  def is mapped to 2
*/

Obiekty

dla ... pętli nie działają bezpośrednio na zwykłych Obiektach; ale możliwe jest iterowanie właściwości obiektu, przechodząc do pętli for ... in lub używając Object.keys() :

const someObject = { name: 'Mike' };

for (let key of Object.keys(someObject)) {
  console.log(key + ": " + someObject[key]);
}

Oczekiwany wynik:

imię: Mike

Pętla „za… w”

Ostrzeżenie
for ... in jest przeznaczony do iteracji po kluczach obiektowych, a nie indeksach tablic. Używanie go do przechodzenia przez tablicę jest ogólnie odradzane . Zawiera także właściwości z prototypu, więc może być konieczne sprawdzenie, czy klucz znajduje się w obiekcie za pomocą hasOwnProperty . Jeśli jakiekolwiek atrybuty w obiekcie zostaną zdefiniowane za pomocą metody defineProperty/defineProperties i ustawiono parametr defineProperty/defineProperties enumerable: false , atrybuty te będą niedostępne.

var object = {"a":"foo", "b":"bar", "c":"baz"};
// `a` is inaccessible
Object.defineProperty(object , 'a', {
        enumerable: false,
});
for (var key in object) {
    if (object.hasOwnProperty(key)) {
      console.log('object.' + key + ', ' + object[key]);
    }
}

Oczekiwany wynik:

object.b, bar
object.c, baz



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow