수색…
통사론
- 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"루프
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
메소드로 정의되고 paramenumerable: 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