같은 if문 안에서 블록문과 블록없는문을 섞어쓰지 말 것
do...while문은 while문과 다르게 루프 바디를 최소 한 번은 실행하려 할 때 사용
break : 루프 중간에 빠져나간다
continue : 루프에서 다음 단계로 바로 건너 뛴다
return : 제어문을 무시하고 현재 함수를 즉시 빠져나간다
throw : 예외 핸들러에서 만드시 처리해야할 예외를 일으킴
객체의 프로퍼티에 루프를 실행하도록 설계된 루프
for(variable in object)
statement
const player = { name: 'Tomas', rank: 'Midshipman', age: 25};
for (let prop in player) {
if(!player.hasOwnProperty(prop)) continue;
console.log(prop + ': ' + player[prop]);
es6에서 새로 생긴 반복문
컬렉션의 요소에 루프를 실행하는 다른 방법
iterable 객체에 모두 사용할 수 있는 범용적인 루프
for(variable of object)
statement
const hand = [randFace(), randFace(), randFace()];
for(let face of hand)
console.log(`you rolled...${face}!`);
for ... of는 배열에 루프를 실행해야 하지만, 각 요소의 인덱스를 알 필요는 없을 때 사용
/* 제어문 중첩의 경우 */
while(fund > 1 && fund < 100){
let totalBet = rand(1, funds);
if(totalBet === 13) console.log("unlucky! skip this round..."):
else //플레이...
}
/* continue 사용하여 구조 간결하게 */
while(fund > 1 && fund < 100){
let totalBet = rand(1, funds);
if(totalBet === 13) {
console.log("unlucky! skip this round..."):
continue;
}
//플레이..
}
for루프가 끝나도 인덱스 변수의 값은 그대로 유지된다는 점 활용
break문을 써서 루프를 끝내도록 해야만 사용할 수 있다
let i=0;
for(; i<bigArrayOfNumbers.length; i++){
if(isPrime(bigArrayOfNumbers[i])) break;
}
if(i === bigArrayOfNumbers.length) console.log('No Prime numbers!');
else console.log(`First prime number found at position ${i}`);
/* 작동하지 않는 예시
인덱스는 점점 커지는데 우리는 요소를 제거하고 있으므로, 소수가 연달아 존재한다면 그중 일부를
제거하지 않고 넘어갈 가능성이 있음 */
for(let i=0; i<bigArrayOfNumbers.length; i++){
if(isPrime(bigArrayOfNumbers[i])) bigArrayOfNumbers.splice(i,1);
}
/* 정상 작동 예시 */
for(let i=bigArrayOfNumbers/length-1; i>=0; i--){
if(isPrime(bigArrayOfNumbers[i])) bigArrayOfNumbers.splice(i,1);
}
💡 QUIZ
- 연산자 뒤에 공백을 허용하나요 ?
네. return은 불가. 스페이스는 가능 엔터는 불가- a라는 명제의 참, 거짓을 판별하는 명제가 b명제라면 b는 a의 메타언어, a는 b의 대상언어
- else if문이라는 제어문은 존재하지않음. else 다음에 if가 오는 것과 똑같기 때문
- for ... in 과 for ... of의 차이 ?
for in은 객체의 프로퍼티를 전체 순회하는것
for of는 객체가 배열과 같은 iterable한 객체이어야함- 배열에 for in을 쓰면 배열자체가 요소 하나로 인식될 수도 있는 문제가 생김.
- for ... in에서 자주 일어나는 에러를 방지하는 함수 : hasOwnProperty