ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Javascript] for, in , of, while, do while
    웹/JavaScript 2023. 1. 10. 14:23

    I. for문 사용법

    👉 MDN 문서 보기

     

    괄호 안의 3개의 식에 따른 반복수행

    • 변수의 선언 및 할당
    • 종료조건. 부재 시 항상 참
    • 참일 시 블록 안의 코드 이후 실행문
    // 💡 변수이므로 let이 사용됨
    for (let i = 0; i < 5; i++) {
    console.log(i);
    }

     

    for (let i = 0; i < 5;) {
    console.log(i++); // ++i로 바꿔볼 것
    }

     

    for (let i = 10; i >= 0; i-= 2) {
    console.log(i);
    }



    💡 중첩 사용

    for (let i = 1; i <= 9; i++) {
    for (let j = 1; j <= 9; j++) {
    console.log(`${i} * ${j} = ${i * j}`);
    }
    }
    • 두 스택의 스코프가 쌓이는 것



    둘 이상의 변수 사용

    for (let x = 0, y = 10; x <= y; x++, y--) {
    console.log(x, y);
    }

     

    for (
    let x = true, y = 0, z = 0;
    y * z < 10;
    x = !x, x ? y++ : z++
    ) {
    console.log(y, z);
    }



    ⭐ 무한루프 실행시 브라우저가 멈출 수 있음

    let x = 0;
    for (;;) {
    console.log(x);
    }
    console.log('출력 안됨');

     

    for (let i = 0; i < 10; i++) {
    console.log(i--);
    }
    console.log('출력 안됨');



    💡 객체와 배열의 for문

    객체: for (키 이름 in 객체명) - 객체의 키들을 순서대로 반환

    👉 MDN 문서 보기

    const lunch = {
    name: '라면',
    taste: '매운맛',
    kilocalories: 500,
    cold: false
    }
    for (const key in lunch) { // 💡 변할 것이 아니므로 const 사용
    console.log(key, ':', lunch[key])
    }

     

    // 키의 이름은 자유롭게 사용 가능
    for (const k in lunch) {
    console.log(k, ':', lunch[k])
    }

     

    배열: for (항목 of 배열명) - 배열의 항목들을 순서대로 반환

    👉 MDN 문서 보기

    • 정확히는 이터러블 iterable (배열도 그 일종)에 사용됨 이후 배울 것
    const list = [1, '가나다', false, null];
    for (const item of list) {
    console.log(item);
    }
    for (const el of list) {
    console.log(el);
    }

     

    // 문자열 역시 이터러블이므로 사용 가능
    for (const letter of '안녕하세요~') {
    console.log(letter);
    }



    💡 for ... of문의 장점

    const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    // ⚠️ 변수(i)를 사용하므로 위험요소 존재
    for (let i = 0; i < numbers.length; i++) {
    // 이곳에 i를 변경하는 코드가 들어간다면...
    console.log(numbers[i]);
    }

     

    // ⭐️ 변수를 사용하지 않음으로 보다 안전
    for (const num of numbers) {
    console.log(num);
    }



    💡 또 다른 예시

    const numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    const numbers2 = [];
    for (let num of numbers1) {
    num++; // ⚠️ 복사된 값. let 사용 주목
    numbers2.push(num + 1);
    }
    console.log(numbers1, numbers2);

     

    for (let i = 0; i < numbers1.length; i++) {
    numbers1[i]++; // ⚠️ 실제 값에 인덱스로 접근 - 원본 배열의 내용 변경
    }
    console.log(numbers1, numbers2);




     

    II. continue와 break

    1. continue - 한 루프를 건너뜀

    👉 MDN 문서 보기

    for (let i = 1; i <= 10; i++) {
    if (i % 3 === 0) continue;
    console.log(i);
    }
    console.log('for 루프 종료');

    2. break - 블록을 종료하고 빠져나옴

    👉 MDN 문서 보기

    for (let i = 1; i <= 10; i++) {
    if (i === 5) break;
    console.log(i);
    }
    console.log('for 루프 종료');



    3. label - 중첩된 반복문을 명명하여 continue 또는 break에 사용

    👉 MDN 문서 보기

    • 널리 사용되지는 않음
    outer:
    for (let i = 1; i < 10; i++) {
    inner:
    for (let j = 1; j < 10; j++) {
    if (j % 2 === 0) continue inner;
    if (i * j >= 30) continue outer;
     
    if (j > 8) break inner;
    if (i - j > 7) break outer;
    console.log(i, j, i * j);
    }
    }

    while - 조건이 참인 동안 반복수행

    👉 MDN 문서 보기

    let x = 0;
    while (x < 10) {
    console.log(x++);
    }


    💡 무한루프

    let x = 0;
    while (x < 10) {
    console.log(x);
    }
     
    // 인위적인 무한반복에 널리 쓰이는 코드
    while (true) {
    console.log('무한반복');
    }

    ⭐ break문으로 무한반복 탈출 가능

    let x = 0;
    while (true) {
    if (x++ >= 5) break; // 😎
    console.log(x);
    }
    // 1 ~ 5 출력


    continue와 break 사용

    // 1, 3, 5, 7을 의도한 코드. 그러나...
    // ⚠️ 무한루프! 왜일까요?
    let x = 0;
    while (x < 14) {
    if (x % 2 === 0) continue;
    if (x > 7) break;
    console.log(x++);
    }
     
    // 짧게 짠 수정 코드
    let x = 0;
    while (x < 14) {
    if (x++ % 2 === 0) continue;
    if (x > 8) break;
    console.log(x - 1);
    }
     
    // 가독성 위주로 짠 코드
    // 코드에 의도가 드러나도록
    let x = 0;
    while (x < 14) {
    const toContinue = x % 2 === 0;
    const toBreak = x > 7;
    const xNow = x++;
    if (toContinue) continue;
    if (toBreak) break;
    console.log(xNow);
    }

     더 짧고도 직관성을 유지한 코드의 예

    let x = 0;
    while (x < 14) {
    const xNow = x++;
    if (xNow % 2 === 0) continue;
    if (xNow > 7) break;
    console.log(xNow);
    }


    do while - 일단 수행하고 조건을 평가

    👉 MDN 문서 보기

    let x = 12;
    do {
    console.log(x++);
    } while (x < 10);
     
Designed by Tistory.