[러닝자바스크립트] Ch4. 제어문

hanjiyeon·2020년 10월 29일
0

러닝자바스크립트

목록 보기
4/5
post-thumbnail

4.1 제어문의 기초

같은 if문 안에서 블록문과 블록없는문을 섞어쓰지 말 것
do...while문은 while문과 다르게 루프 바디를 최소 한 번은 실행하려 할 때 사용

4.2 자바스크립트의 제어문

break : 루프 중간에 빠져나간다
continue : 루프에서 다음 단계로 바로 건너 뛴다
return : 제어문을 무시하고 현재 함수를 즉시 빠져나간다
throw : 예외 핸들러에서 만드시 처리해야할 예외를 일으킴

  • 메타 문법 : 다른 문법을 설명하는 문법
    1. 대괄호로 감싼 것은 옵션
    2. 생략부호는 여기 들어갈 내용이 더 있다는 뜻

for ... in 루프

객체의 프로퍼티에 루프를 실행하도록 설계된 루프

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

for ... of 루프

es6에서 새로 생긴 반복문
컬렉션의 요소에 루프를 실행하는 다른 방법
iterable 객체에 모두 사용할 수 있는 범용적인 루프

for(variable of object)
	statement

const hand = [randFace(), randFace(), randFace()];
for(let face of hand)
	console.log(`you rolled...${face}!`);

for ... of는 배열에 루프를 실행해야 하지만, 각 요소의 인덱스를 알 필요는 없을 때 사용

4.3 유용한 제어문 패턴

continue문을 사용하여 조건 중첩 줄이기

/* 제어문 중첩의 경우 */
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;
  }
  //플레이..
}

break나 return문을 써서 불필요한 연산 줄이기

루프를 완료한 뒤 인덱스 값 아용하기

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

4.4 요약

💡 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

0개의 댓글