본문 바로가기

Programming/국비학원

220629 - 자바스크립트 - 변수, 연산자, 조건문(if, switch, 삼항연산자, 짧은 조건문), 반복문(for문, 향상된 for문)

BOM, DOM

참고: https://csooy38.com/JavaScript-BOM-&-DOM

https://cbw1030.tistory.com/46

 

[Javascript] Window, DOM, BOM이란?

나는 자바스크립트 언어를 Window, DOM, BOM이 정확히 무엇을 의미하는지도 모른채 사용해왔다. 사실 Window, DOM과 BOM을 이해하기 위해 과거에 여러 문서를 보고 구글링도 했었지만 와닿지가 않았고

cbw1030.tistory.com

 

[JavaScript] BOM & DOM

자바스크립트(JavaScript) 8. BOM BOM(Browser Object Model : 브라우저 객체 모델)은 브라우저 내에 내장된 객체를 의미한다. BOM 객체의 최상위 내장 객체는 window 객체로, 생략가능하다. 8.1. window 객체 window

csooy38.com

 

 

최상위 객체는 window

 

  • BOM (Browser Object Model)

: 브라우저 창 조작

screen, location, history 메소드

 

 

  • DOM (Document Object Model)

: 문서 내의 모든 요소를 정의하고, 각각의 요소에 접근하는 방법을 제공

자바스크립트에서 동적인 HTML을 위해 DOM 객체에 접근하여 조작

 

 

 

연산자
  • 문제

1분기 판매량 1200
2분기 판매량 1300
3분기 판매량 1000
=> 4분기 판매량 입력받기
1분기~3분기의 평균 이상 -> 판매량이 평균 이상입니다 / 판매량 평균 미달입니다.
document.write

 

=>

 

    <script>
        var first = 1200;
        var second = 1300;
        var third = 1000;
        var avg = (first+second+third)/3;
        var fourth = Number(prompt("4분기 판매량은?"));
        var result = (fourth>=avg)?"판매량이 평균 이상입니다.":"판매량이 평균 미달입니다";
        document.write(result);
    </script>

 

 

  • input 값 받아 script function 적용하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>연산자</title>
    <style>
        #contents {
            width: 450px;
            margin: 0 auto;
        }
        #contents>img{
            float: left;
            margin-right: 20px;
        }
        #contents>ul {
            list-style: none;
            padding-top: 40px;
        }
        #contents li{
            margin-bottom: 10px;
        }
        #contents li label{
            width: 80px;
            float: left;
            text-align: right;
        }
        #contents li input{
            width: 110px;
            padding: 5px 10px;
            border: 1px solid #ccc;
            margin: 0 5px 0 10px;
        }
        #contents>ul>li:last-child{
            margin-top: 20px;
            text-align: center;
        }
        #contents ul button{
            padding: 5px 10px;
            border: 1px solid #ccc;
            font-size: 1.1em;
        }
        #contents button:hover{
            background-color: greenyellow;
        }
        #showResult{
            margin-top: 20px;
            font-size: 1.5em;
        }
    </style>
    <script>
        function showPrice(){
            var oPrice = document.querySelector("#oPrice").value;
            var rate = document.querySelector("#rate").value;
            var rPrice = oPrice*rate/100//할인액
            var price = oPrice-rPrice; //할인 후 가격
            document.querySelector("#showResult").innerHTML="상품의 정상가는 "+
            oPrice+"원이고, 할인율은 "+rate+"%입니다. "+rPrice+
            "원을 절약한 "+price+"원에 살 수 있습니다.";
        }
    </script>
</head>
<body>
    <div id="contents">
        <img src="../images/sale.png" alt="sale">
        <ul>
            <li>
                <label for="oPrice">정상 가격</label>
                <input type="text" id="oPrice">
            </li>
            <li>
                <label for="rate">할인율</label>
                <input type="text" id="rate">%
            </li>
            <li>
                <button onclick="showPrice();">할인가격 계산하기</button>
            </li>
        </ul>
        <div id="showResult">
            
        </div>
    </div>
</body>
cs

 

 

  • 문제 : 연필 나누어주기

연필총개수
인원수
=>연필 총개수는 00개이며 00명에게 나누어 줄 것입니다. 1인당 00개씩 나누어주고 연필이 00개 남았습니다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>연산자</title>
    <style>
        #contents {
            width: 450px;
            margin: 0 auto;
        }
        #contents>img{
            float: left;
            margin-right: 20px;
        }
        #contents>ul {
            list-style: none;
            padding-top: 40px;
        }
        #contents li{
            margin-bottom: 10px;
        }
        #contents li label{
            width: 80px;
            float: left;
            text-align: right;
        }
        #contents li input{
            width: 110px;
            padding: 5px 10px;
            border: 1px solid #ccc;
            margin: 0 5px 0 10px;
        }
        #contents>ul>li:last-child{
            margin-top: 20px;
            text-align: center;
        }
        #contents ul button{
            padding: 5px 10px;
            border: 1px solid #ccc;
            font-size: 1.1em;
        }
        #contents button:hover{
            background-color: greenyellow;
        }
        #showResult{
            margin-top: 20px;
            font-size: 1.5em;
        }
    </style>
    <script>
        function showDivide(){
            var totalPencil=document.querySelector("#totalPencil").value;
            var number=document.querySelector("#number").value;
            var residue=totalPencil%number;
            var shared=parseInt(totalPencil/number);
            document.querySelector("#showResult").innerHTML="연필 총 개수는 "+totalPencil+"개이며 "
            +number+"명에게 나눠 줄 것입니다. 1인당 "+shared+"개씩 나누어주고 연필은 "+residue+"만큼 남았습니다.";
        }
    </script>
</head>
<body>
    <div id="contents">
        <img src="../images/3.png" alt="sale">
        <ul>
            <li>
                <label for="totalPencil">연필총개수</label>
                <input type="text" id="totalPencil">
            </li>
            <li>
                <label for="number">인원수</label>
                <input type="text" id="number">
            </li>
            <li>
                <button onclick="showDivide();">연필 나누어주기</button>
            </li>
        </ul>
        <div id="showResult">
            
        </div>
    </div>
</body>
cs

 

 

  • 복합 대입 연산자 (cf. 대입연산자 : =)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>복합대입연산자</title>
    <script>
        function menu(){
            var list="";  //초기화 필수
            list+="<ul>";
            list+="<li>된장찌개</li>";
            list+="<li>순대국</li>";
            list+="<li>칼국수</li>";
            list+="</ul>";
            document.body.innerHTML+=list;
        }
    </script>
</head>
<body>
    <h2 onclick="menu();">오늘의 메뉴</h2>  //() 필수
</body>
cs

 

 

  • 비교연산자 ==, ===

== : 자료형 상관없이 값 비교 (type 다르면 형변환)

ex. 

    <script>
        alert(0==false);  //true
        alert(50=='50');  //true
    </script>

 

=== : 자료형, 값 모두 일치해야 함

ex.
    <script>
        alert(0===false);  //false
        alert(50==='50');  //false
    </script>

 

 

변수
  • 재선언

    <script>
        var food="김치찌개";
        var food="부대찌개";  //자바: 변수 이름 중복으로 컴파일 오류
        var food="칼국수"; 
        alert(food);  
    </script>

 

=> 마지막 값인 칼국수 출력

 

 

cf. 
    <script>
        var food="김치찌개";
        food="부대찌개";   //값 변경한 것일 뿐
        food="칼국수"; 
        alert(food); 
    </script>

 

 

  • typeof

: 값의 타입 알려주는 함수 (int, string, undefined,..)

 

ex.

    <script>
        var num;
        alert(typeof(num));
    </script>


=> 값을 알 수 없으므로 (타입이 주어지지 않음) undefined

 

 

  • confirm :확인/취소 창

ex. var num = confirm("숫자 입력하시겠습니까?");

 

확인 = true, 1 / 취소 = false, 0

 

 

 

조건문
  • if문
  • 문제 : 숫자 입력받아 3의 배수인지 체크
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>조건문</title>
    <style>
        #result{
            width: 500px;
            height: 100px;
            margin: 50px auto;
            padding: 10px;
            border: 1px solid #ccc;
            box-shadow: 1px 2px 1px #666;
            font-size: 1.4em;
            line-height: 100px;
            text-align: center;
            font-weight: bold;
        }
    </style>
    <script>
 
        function qua(){
            var userNum=prompt("숫자를 입력하세요","0");
            var displayArea=document.querySelector("#result");
            if (userNum!=null){  //null : alert 취소버튼
                if (userNum%3===0){
                    displayArea.innerHTML=userNum+"은 3의 배수입니다";
                }else{
                    displayArea.innerHTML=userNum+"은 3의 배수가 아닙니다";
                }
            } else{
                alert("입력이 취소되었습니다");
            }
        }
    </script>
</head>
<body>
    <button onclick="qua();">3의 배수 체크 문제 풀기</button>
    <div id="result">
 
    </div>
</body>
cs

 

 

  • 문제

0~5 => 아직 새벽입니다. 일찍 일어나셨네요.
6~11 => 상쾌한 아침입니다. 좋은 하루 되세요.
12~17 => 즐거운 오후 되세요.
18~23 => 행복한 저녁 되세요.
alert

 

=>

    <script>
        var d=new Date();
        var h = d.getHours();
        if (0<=h&&h<=5){   //h<6
            alert("아직 새벽입니다. 일찍 일어나셨네요.");
        } else if (h<=11){  //h<12
            alert("상쾌한 아침입니다. 좋은 하루 되세요.");
        } else if (h<=17){  //h<18
            alert("즐거운 오후 되세요.");
        } else{
            alert("행복한 저녁 되세요.");
        }
    </script>

 

 

 

  • switch문

조건이 한정적, 명확할 때 사용

 

 

  •  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>switch 조건문</title>
    <style>
        body{
            background-color: #666;
            color: #fff;
        }
        p{
            margin-top: 80px;
            font-size: 2em;
            font-weight: 700;
            text-align: center;
            text-shadow: 1px 2px 1px #000;
        }
        p strong{
            font-size: 2.3em;
            color: #ff0;
        }
    </style>
    <script>
        var choice = Number(prompt("여행지를 선택해주세요(1. 미주 2. 유럽 3. 동남아)")); 
//input은 문자 인식
        switch(choice){
            case 1:  //case "1":
                document.write("<p>미주 여행은 <strong>1층 안내데스크</strong>에 문의하세요</p>");
                break;  
            case 2:
                document.write("<p>유럽 여행은 <strong>2층 안내데스크</strong>에 문의하세요</p>");
                break;
            case 3:
                document.write("<p>동남아 여행은 <strong>3층 안내데스크</strong>에 문의하세요</p>");
                break;
            default:
                alert("여행지 선택이 잘못되었습니다.");  //break X
        }        
    </script>
</head>
<body>
 
</body>
cs

 

 

  • 문제 : prompt -> 짝홀수 분류


    <script>
        var num = prompt("숫자를 입력하세요");
        switch(num%2){
            case 0: 
                document.write("짝수입니다");
                break;
            case 1:
                document.write("홀수입니다");
                break;
            default:
                alert("숫자가 아닙니다");
        }
    </script>

 

 

 

  • 삼항 연산자
  •  

    <script>
        var score = Number(prompt("점수를 입력해주세요"));
        (score>=80)?alert("합격"):alert("불합격");
    </script>

 

 

 

  • 짧은 조건문

if문 없더라도 조건문 실행
(bool 표현식)||(bool 표현식 거짓일 때 수행할 문장)
(bool 표현식)&&(bool 표현식 일 때 수행할 문장)

 

 

  • or 

    <script>
        true || alert("실행?A");  //왼쪽 true 실행돼 오른쪽 alert으로 안 넘어감
        false || alert("실행?B");  //왼쪽 false이므로 오른쪽으로 넘어가 alert 실행
    </script>

=> 실행?B alert 실행됨

 

 

  • and (왼쪽 true면 다음 조건도 조사함)

    <script>
        var input=Number(prompt("숫자를 입력해주세요"));
        input%2==0||document.write("홀수");  //if not A, B  
        input%2==0&&document.write("짝수");  //if A, B 
    </script>

 

 

 

반복문
  • for문
  •  

    <script>
        var sum=0;
        for (var i=1;i<100;i++){
            sum+=i;
        }
        document.write("1부터 100까지 합= "+sum);
    </script>

 

 

※ 자바스크립트 배열 기호
var nums = [10,20,30]
alert(nums[0]);

cf. 자바
int[] nums ={10,20,30};
sys~(nums[0]);

 

 

 

  • 문제 : 배열 역순 출력

    <script>
        var seasons=["봄", "여름", "가을","겨울"];
        /*for (var i=0;i<seasons.length;i++){
            document.write(seasons[i]+"<br>");
        }*/
        for (var i=seasons.length-1;i>=0;i--){
            document.write(seasons[i]+"<br>");
        }
    </script>

 

 

  • 문제 : 평균, 총합

    <script>
        var scores = [89,74,63,88,70,96,88,55,60];
        var sum=0;
        for (var i=0;i<scores.length;i++){
            sum+=scores[i];
        }
        var avg=parseInt(sum/scores.length);
        document.write(sum+" "+avg);
    </script>

 

 

※  Number - parseInt 의 차이

 

1. Number
    <script> 
        var input=Number(prompt("점수를 입력하세요"));  
        var score = input+10;
        alert(score);
    </script>

=> 숫자+문자 input -> NaN(알 수 없는 값) 출력

 


2. parseInt
    <script>
        var input=parseInt(prompt("점수를 입력하세요")); 
        var score = input+10;
        alert(score);
    </script>

=> 숫자+문자 input -> 정수 출력
=> 기존 parseInt 원리 활용 (90.xxx 일 때 소수점 모두 없애고 90만 추출)

=> 추후 css 스타일 변경시 활용 예정  ex. parseInt("80px")*2

 

 

  • 배열 출력

    <script>
        var seasons =["봄","여름","가을","겨울"];
        document.write(seasons+"<br>");    //봄,여름,가을,겨울 => 콤마 구분자
        var scores = [89,74,63,88,70,96,88,55,60];
        document.write(scores);    //89,74,63,88,70,96,88,55,60  
        var na = "korea";
        document.write(na);    //korea
        document.write(na[2]);    //r
    </script>

 

        var nums=[10,20];
        nums.push(30);
        nums.push(55);
        nums.push(70);
        document.write(nums);  //10,20,30,55,70

 

        var arr=[10,"대한민국",2.4,false];
        document.write(arr);  //10,대한민국,2.4,false

 

 

※ node.js es6 => 변수 타입으로 var 대신 let 사용

 

 

  • 향상된 for문
  •  

        var fruits=['자두','참외','수박','사과'];
        for (var i in fruits){
            document.write(fruits[i]);  //자두참외수박사과
        }