📢 어렵고 정석적인 개념 설명보다는 저같은 초보자도 이해하기 쉽게 정리하는 것을 원칙으로 포스팅하고 있습니다. 😄
개념
while
var a = 1;
while (a < 3) {
document.write(a);
a++; // 무한 반복을 방지하기 위한 장치
};
while은 평가 결과가 false가 나올 때까지 문장을 무한 반복하여 실행한다. 무한 반복 방지를 위해 위의 코드처럼 'a++'같은 장치가 필요하다.
( ) 안에는 조건식이 들어가며, { } 안에는 조건식이 true일 때 실행될 문장이 들어간다.
따라서, a가 3보다 작을 때 k를 문서에 작성하겠다는 뜻이다. 밑에 k++가 있기 때문에 처음 1이었던 a는 2가 되어 다시 처음 조건식으로 돌아간다.
do ~ while
var a = 1;
do {
document.write(a);
a++;
} while (a < 3) {
document.write("done"); // false일 때 실행문 (필수 아님)
};
do ~ while은 while과 다를바가 없다. do에 해당하는 문장을 while의 조건식의 결과가 true인 경우 무한 반복하라는 뜻이다. while 뒤에 오는 { } 안의 실행문은 조건식의 결과가 false인 경우 실행되는 문장으로 필수가 아닌 선택이기 때문에 false인 경우 무시하고 싶다면 굳이 쓰지 않아도 된다.
for
for (var k = 0; k < 2; k++) {
document.write(k);
};
while에서는 따로 초기값을 선언해야 하고, 누적연산자를 통해 무한 반복을 방지했었다.
for는 따로 선언할 필요없이, ( )안에 초기값; 조건문; 누적연산자를 넣어 한 줄로 압축할 수 있다.
실행 순서는 "① var k = 0; ② k를 k < 2와 비교 ③ true인 경우 { }안의 문장을 실행한다 ④ k++로 이동 ⑤ k < 2에 false가 나올 때까지 반복"이며 ( )안의 각각의 값들은 모두 생략이 가능하다.
참고로, for와 while은 둘 다 반복문이라는 공통점을 가진 식으로 while문은 for문으로, for문은 while문으로 상호 바꿔쓸 수 있다. 보통 for가 while보다 직관적이기 때문에 for를 주로 쓴다.
for ~ in
var myName = "Shawn";
var result = {
name: myName
}
for (var item in result) { // item이 아닌 임의의 이름을 선언해도 된다. (var도 생략 가능)
document.write(result[item]);
}
/* result[item] = Shwan */
/* item = name */
사실 for ~ in문은 반복문과 전혀 상관없는 식이다. 하지만, for와 외관상으로 비슷하다는 이유로 헷갈릴까봐 for문과 같이 한 페이지에 정리하고자 가져왔다. 우선 for ~ in을 쓰기 위해서는 오브젝트가 필요하다.
위의 코드에서 var result = { }의 형태로 되어있는 부분이 바로 Object이다.
오브젝트 안에는 name과 name의 값인 myName 프로퍼티(속성)가 존재하는데, 이 프로퍼티를 가져오는 역할을 수행하는 게 바로 for ~ in문이라고 할 수 있다.
var myName = "Shawn";
var result = new Object; // 오브젝트를 이런 식으로 만들 수 있다.
result.name = myName; // 오브젝트의 프로퍼티를 이런 식으로 만들 수 있다.
for (var item in result) {
document.write(result[item]);
}
/* result[item] = Shwan */
/* item = name */
오브젝트를 만드는 방법은 다양한데, 맨 위의 코드처럼 var result = { 프로퍼티 }의 형식으로 써도 되지만 생성연산자 new를 이용하여 var result = new Object; 처럼 오브젝트를 만들 수 있다.
이렇게 오브젝트를 만들면, 안에 프로퍼티들은 .(점)을 이용하여 만들 수 있는데, '오브젝트 명.프로퍼티 명 = 프로퍼티 값'의 형식으로 표현한다.
문제
for문과 while문을 각각 활용하여 구구단 2단을 만들어라.
// 1. for문 활용
for (i = 1; i <= 9; i++) {
var result = 2 * i;
document.write(2 + "X" + i + "=" + result + "<br>")
};
// 2. while문 활용
var i = 1;
while (i <= 9) {
var result = 2 * i;
document.write(2 + "X" + i + "=" + result + "<br>")
i++;
}
for문에서 while문으로 바꿀 때는 초기값 변수를 먼저 선언해주고, 실행문 안에 누적연산자를 넣어준다.
for문과 while문을 각각 활용하여 구구단 n단을 만들어라.
(단, 구구단의 n은 유저가 직접 입력한 값을 변수로 가져와야 한다.)
// 1. for문 활용
var num = prompt("구구단 몇 단?")
for (i = 1; i <= 9; i++) {
var result = num * i;
document.write(num + "X" + i + "=" + result + "<br>")
}
// 2. while문 활용
var num = prompt("구구단 몇 단?");
var i = 1;
while (i <= 9) {
var result = num * i;
document.write(num + "X" + i + "=" + result + "<br>")
i++;
}
prompt()는 유저에게 질의하는 함수로, 페이지가 로드되면 값을 입력하는 창이 뜨게 된다.
※ 참고로 prompt()로 반환된 값은 모두 "String" 타입이라는 것을 알아두자!
이중 for문을 활용하여 2단에서 9단까지의 누적 구구단을 만들어라.
(단, 구구단의 n단은 유저가 직접 입력한 값을 변수로 가져와야 한다.)
var userNumber = parseInt(prompt("구구단 몇 단?"));
if (userNumber < 2) {
alert("2 이상의 숫자를 입력해주세요.");
} else if (isNaN(userNumber) == true) { // userNumber가 문자라면
alert("문자는 입력하실 수 없습니다.")
}
for (i = 2; i <= userNumber; i++) {
if (userNumber > 9) {
alert("9 이하의 숫자를 입력해주세요.")
break; // userNumber의 숫자가 9 초과면, 즉시 중단한다.
}
document.write(i + "단<br>");
for (j = 1; j <= 9; j++) { // for문안에 for문 (이중 for문)
var result = i * j;
document.write(i + "X" + j + "=" + result + "<br>")
}
}
parseInt()는 정수(양의 정수, 0, 음의 정수)를 리턴해주는 함수이며, prompt()와 같이 유저에게 정보를 얻어올 때
소수 정보를 정수로 바꿔주는 역할로 쓰면 좋다.
isNaN()은 숫자면 false, 문자면 true를 반환하는 함수로, 연산이 가능한 숫자의 값인지를 확인한다.
'JavaScript' 카테고리의 다른 글
[JavaScript] DOM 이벤트 핸들러 onclick과 onsubmit (0) | 2022.01.12 |
---|---|
[JavaScript] this란 무엇일까? (0) | 2022.01.10 |
[JavaScript] Math.random()으로 랜덤 값 구하기 (0) | 2021.12.28 |
[JavaScript] 조건문 if와 선택문 switch 이해하기 (0) | 2021.12.23 |
[JavaScript] HTML 내용 및 CSS color 속성 변경하기 (0) | 2021.12.20 |