수색…


통사론

  • for ( 초기화 조건 , final_expression ) {}
  • for ( 객체 ) {}
  • for ( 반복 가능한 변수 ) {}
  • while ( 조건 ) {}
  • do {} while ( 조건 ) while
  • 각 ( 개체의 변수 ) {} // XML 용 ECMAScript

비고

자바 스크립트의 루프는 일반적으로 시간의 특정 코드의 X 양을 반복 관련 문제를 해결하는 데 도움이. 5 번 메시지를 기록해야한다고 가정 해보십시오. 당신은 이것을 할 수 있습니다 :

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

그러나 그것은 단지 시간 소모적이고 우스꽝스러운 일입니다. 또한 300 개 이상의 메시지를 로깅해야한다면 어떻게해야합니까? 코드를 기존의 "for"루프로 대체해야합니다.

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

표준 "for"루프

표준 사용

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

예상 출력 :

0
1
...
99

여러 선언

일반적으로 배열의 길이를 캐시하는 데 사용됩니다.

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

예상 출력 :

'에이'
'비'
'기음'

증분 변경하기

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

예상 출력 :

0
2
4
...
98

감분 된 루프

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

예상 출력 :

100
99
98
...
0

"while"Loops

표준 While 루프

표준 while 루프는 주어진 조건이 거짓 일 때까지 실행됩니다 :

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

예상 출력 :

0
1
...
99

감분 된 루프

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

예상 출력 :

100
99
98
...
1

Do ... while 루프

do ... while 루프는 조건이 true인지 false인지에 관계없이 항상 한 번 이상 실행됩니다.

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

예상 출력 :

101

루프에서 "브레이크 아웃"

while 루프의 분리

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

예상 출력 :

42

for 루프에서 분리

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

예상 출력 :

42

루프를 계속합니다.

"for"루프 계속하기

continue 키워드를 for 루프에 넣으면 실행은 업데이트 표현식으로 건너 뜁니다 (이 예에서 i++ ).

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

예상 출력 :

0
2

While 루프 계속하기

while 루프를 continue 하면 실행은 조건으로 건너 뜁니다 (예제에서 i < 3 ).

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

예상 출력 :

0
2

"do ... while"루프

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

do while 루프는 반복의 끝에서만 조건이 검사되므로 적어도 한 번은 실행되도록 보장됩니다. 전통적인 while 루프는 반복이 시작될 때 상태가 점검 될 때 0 번 이상 실행될 수 있습니다.

특정 중첩 루프 중단

필요한 경우 루프를 지정하고 특정 루프를 해제 할 수 있습니다.

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;    
        }
    }
}

산출:

0
0
0
1

라벨 끊기 및 계속하기

break와 continue 문 다음에 어떤 goto 문처럼 작동하는 선택적인 레이블을 붙일 수 있으며 레이블 참조 위치에서 실행을 재개 할 수 있습니다

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은 나머지 j 값을 건너 뜁니다.
1 0
i = 1 j = 1 나머지 j 값을 건너 뜁니다.
2 0
2 1 i = 2 j = 2 나머지 j 값을 건너 뜁니다.
3 0
3 1
3 2
i = 3 j = 3 나머지 j 값을 건너 뜁니다.
4 0
4 1
4 2
4 3
i = 4 j = 4는 기록되지 않고 루프가 완료됩니다.

"for ... of"루프

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

예상 출력 :

0
1
2

for ... of 루프의 이점은 다음과 같습니다.

  • 이것은 배열 요소를 통해 루핑하기위한 가장 간결하고 직접적인 구문입니다
  • 그것은 for의 모든 함정을 피합니다.
  • forEach() 와 달리 break, continue 및 return과 함께 작동합니다.

다른 컬렉션에 대한 지원 ...

문자열

for ... of는 문자열을 유니 코드 문자 시퀀스로 처리합니다.

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

예상 출력 :

a b c

세트

for ... for Set 객체 에 대한 작업.

참고 :

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

const uniqueNames = new Set(names);

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

예상 출력 :

단발
알레한드로
잔드라
안나

지도

또한 ... for 루프를 사용하여 Map 을 반복 할 수 있습니다. 이는 반복 변수가 키와 값을 저장한다는 점을 제외하고는 배열과 세트와 유사하게 작동합니다.

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]
}

소멸 할당 을 사용하여 키와 값을 별도로 캡처 할 수 있습니다.

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
*/

사물

... for 루프 일반 객체에서 직접 작동 하지 않습니다 . for ... in 루프로 전환하거나 Object.keys() 사용하여 객체의 속성을 반복 할 수 있습니다.

const someObject = { name: 'Mike' };

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

예상 출력 :

이름 : 마이크

"for ... in"루프

경고
for ... in은 배열 인덱스가 아닌 객체 키를 반복하기위한 것입니다. 그것을 배열을 통해 반복 할 때는 일반적으로 사용하지 않는 것이 좋습니다 . 프로토 타입의 속성도 포함되므로 hasOwnProperty 사용하여 키가 객체 내에 있는지 확인해야 할 수 있습니다. 객체의 속성이 defineProperty/defineProperties 메소드로 정의되고 param enumerable: false 설정된 경우 해당 속성에 액세스 할 수 없습니다.

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]);
    }
}

예상 출력 :

object.b, bar
object.c, baz



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow