** 예제 1214 ( 객체 ) **

 

* 소스 

 


 

 

** 예제 1214_2 (문서 객체 생성하기 ) **

 

당신의 이름은 무엇인가요? 클릭 전.

 

 

 

 

 

 

 

 

 

 

당신의 이름은 무엇인가요? 클릭 후.

 

 

 

 

 

 

 

 

 

 

 

 


** 예제 1214_3 ( 이벤트 처리 )**

 

 

 

 


** 예제 1214_4 ( 이벤트 처리 ) **


** 예제 1214_5 ( 계산기 )**

 


** 예제 1214_6 ( 문서 객체 스타일 변경하기 ) **

 




 

** Window 객체 **

 모든 객체, 전역함수, 전역 변수들은 자동으로 window 객체의 프로퍼티가 됨.

Window객체의 메서드는 전역함수이며, window 객체의 프로퍼티는 전역 변수가 됨.

문서 객체 모델(DOM)의 요소들도 모두 window객체의 프로퍼티가 됨.

 

- 브라우저 새 창 열기 : window.open() 메서드

// 변수 strWindowFeatures를 통해 새롭게 여는 브라우저 창의 옵션들을 일일이 설정 가능.

var strWindowFeatures = "menubar = yes

- 브라우저 창 닫기 : close() 메서드

 

 

 

** 예제 1214_6 (Window 객체)**

 




 

** Location 객체 **

현재 브라우저에 표시된 HTML 문서의 주소를 얻거나, 브라우저에 새 문서를 불러올 때 사용

 

- 현재 문서의 URL 주소

예 ) document.write("현새 문서의 주소는 " + location.href + "입니다.");

 

 

** History 객체 **

브라우저의 히스토리 정보를 문서와 문서 상태 목록으로 저장하는 객체

 

- 히스토리 목록 접근

이전페이지로 가기 - window.history.back(); 또는 window.history.go(-1);

다음페이지로 가기 - window.history.forward();

 

 

 

** 예제 1214_6 (location객체 / history객체)**

 




* Screen 객체 *

screen.width와 screen.height는 현재 사용자의 모니터 화면의 크기를 반환.

window.outerWidth와 widow.outerHeight는 현재 브라우저 창의 크기를 반환.

 

** 예제 1214_6 ( 사용자 화면 크기 )**

 


 

** 정규 표현식 **

문자열에서 특정한 규칙을 가지는 문자열의 집합을 찾아내기 위한 검색 패턴.

이러한 검색패턴은 모든 종류의 문자열 검색이나 교체 등의 작업에서 사용.

 

문법) / 검색패턴 / 플래그

         search() 메서드는 해당 문자열에서 인수로 전달받은 정규 표현식과 일치하는 첫번째 문자열의 위치를 반환해주는 자바스크립트의 String메서드이다.

 

- regExp 객체 : 정규 표현식을 구현한 자바스크립트 표준 내장 객체

  test() 메서드 : 인수로 전달된 문자열에 특정 패턴과 일치하는 문자열이 있는지를 검색.

                         패턴과 일치하는 문자열이 있으면 true를, 없으면 false를 반환함.

기능 설명
^ 시작   문자열의 시작을 표시
$   문자열의 끝을 표시
. 문자   한 개의 문자와 일치
\d 숫자   한개의 숫자와 일치
\w 문자와 숫자    한개의 문자나 숫자와 일치
\s 공백 문자   공백, 탭, 줄바꿈, 캐리지 리턴 문자와 일치
[] 문자종류, 문자범위   [abc] 는 a또는 b 또는 c
  [a-z] 는 a부터 z까지 중의 하나
  [1-9] 는 1부터 9까지 중의 하나

 

예) 

/abc/      : 정확히 "abc"와만 일치됨.

/./           : 한자리의 문자, 예를 들어 "A", "1", "$"

/\d/d/d/   : 3자리

/[a-z]/     :

/\w/        :

/^\d/       :

/\d\d$/    :

 

메타문자 뒤에 수량한정자를 붙일 수 있음. 수량한정자는 문자가 몇번 반복되는냐를 나타냄

수량 한정자  기 능 설 명
* 0 회 이상 반복 "a*" 는 "" , "a", "aa", "aaa" ...를 나타낸다
+ 1회 이상 "a+" 는 "a", "aa", "aaa"를 나타낸다
? 0 또는 1회 "a?" 는 "", "a" 를 나타낸다.
{m} m회 "a{3}"는 "aaa"만 나타낸다.
{m,n} m회 이상 n회 이하 "a{1,3}"은 "a", "aa", "aaa"를 나타낸다
{ab} 그룹화 (ab)* 은 "","ab", "abab"등을 나타낸다.

 

예)

/.+/   -   어떤 문자가 1회 이상 반복

/\w*/ - 어떤 문자나 숫자로 이루어진 문자열

/^[1-9][0-9]*$/  -  처음 숫자가 0이 아니고 전체가 숫자 (예 - 가격)

/^\d{6}-\d{7}$/  -  중간에 -이 있는 주민등록번호

/(Good)?Bye/  -  "GoodBye" 또는 "Bye"

 

 

 

** 대화상자 (dialog box) **

 

- alert() 

사용자에게 간단한 메시지를 보여주고, 그것에 대한 사용자의 확인을 기다린다. (확인버튼을 누를때까지 프로그램이 멈춰있다.)  

 

- prompt()

사용자에게 간단한 메시지를 보여주고, 사용자가 입력한 문자열을 반환함.

 

- confirm()

사용자에게 간단한 메시지를 보여주고, 사용자가 확인이나 취소를 누르면 그 결과를 불리언 값으로 반환함.

 

 

** 예제 1214_7 **

 


 

 

 

 

* 소스 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트</title>
</head>
<body>
    
    <script>
        // 배열에 1부터 100까지 저장한 후 모두 더하기
        var arrdata = [];
        var gubun = "";

        function insertArr(chk){

            gubun = chk;

            var i;
            for(i = 0 ; i < 100 ; i++){
                arrdata[i] = i + 1;
            }

            if(gubun == "I"){
                selectArr();
            }
            else if (gubun == "D"){
                delArr();
            }
        }

        function selectArr(){
            var i;
            for(i = 0 ; i < arrdata.length ; i++){
                document.write(arrdata[i] + " ");
            }
            addArr();
        }

        function addArr(){
            var i, sum=0;

            for(i = 0 ; i < arrdata.length ; i++){
                sum += arrdata[i];
            }

            if(gubun == "I"){
                document.write("<p>배열 데이터 덧셈 연산결과 : " + sum + "</p>");
            }

            else if(gubun == "D"){
                document.write("<p>홀수번째 데이터 초기화 완료 : " + sum + "</p>");
            }

            document.write("<a href='1214_8.html'>돌아가기</a>");
        }

        function delArr(chk){
            //홀수번째 0으로 초기화
            var i;
            for(i = 0 ; i < arrdata.length ; i++){
                if(i % 2 == 0)      //if(arrdata[i] % 2 != 0){
                    arrdata[i] = 0;
                }

            selectArr();    
        }
    </script>
    
    
    <!-- 1.생성,조회,연산을 우선 적용하고 2.홀수번째 0으로 초기화 적용 -->
    <input type="button" value="배열 생성.조회.연산" onclick="insertArr('I')" />
    <br />
    <input type="button" value="배열의 홀수번째 0으로 초기화" onclick="insertArr('D')" />


</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

** for / in 문 **

- 해당 객체의 열거할 수 있는 모든 프로퍼티는 순회할 수 있도록 해줌.

- 문법 ) for(변수 in 객체){

                 객체의 열거할 수 있는 모든 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;      }

 

 

** label 문 **

프로그램 내의 특정 영역을 식별할 수 있도록 해주는 식별자

label문을 사용하면 continue문과 break 문의 동작이 프로그램의 흐름을 특정 영역으로 이동

 

- continue  : 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 표현식으로 넘어가게함

                        문법1. continue;

                        문법2. continue 라벨이름;

- break 문 : 반복문을 완전히 종료시키고 다음위치의 실행문으로 프로그램의 흐름을 이동

                        문법1. break;

                        문법2. break 라벨이름;

 

 

* 예제 1213_2 (label 문) * - label문은 잘 사용하지 않는다. (문법정도만 알아두기)

* leble 을 break와  continue 사용

 

 

* 예제 1213_2 (switch문) *

 

 

 

 

 

 

 

 


** 배열 **

- 배열의 특징

배열 요소의 타입이 고정되어 이지 않으므로, 같은 배열에 있는 배열 요소끼리의 타입이 서로 다를 수 있다.

배열 요소의 인덱스가 연속적이지 않아도 되며, 때문에 특정 배열 요소가 비어 있을 수 있음

자바스크립트에서 배열은 Array객체로 다뤄진다.

 

- 배열의 참조

배열의 각 요소를 참조하고 싶을 때는 []연산자를 사용함. 문법 : 배열이름[인덱스]

배열 요소의 개수를 배열의 길이라고 함.

배열의 길이는 length 프로퍼티에 자동으로 갱신됨.

cf) 삭제예)  delete arr[2];    //배열의 3번째 요소를 삭제함, 배열의 길이는 변하지 않는다.

 

- 배열의 요소 추가

문법) 

1. arr.push(추가할 요소);                  // push메소드를 이용하는 방법

2.arr[arr.length] = 추가할 요소;         // length 프로퍼티를 이용하는 방법

3.arr[특정인덱스] = 추가할 요소;      // 특정 인덱스를 지정하여 추가하는 방법

push()메서드와 length프로퍼티를 이용한 추가방법은 모두 배열의 끝에 새로운 요소가 추가된다.

 

- 배열 요소 접근

모든 요소에 차례대로 접근하고 싶을 때는 for/in 과 같은 반복문을 사용하여 접근

 

- Array객체

배열은 정렬된 값들의 집합으로 정의되며, Array객체로 다뤄짐

 

- 희소 배열 

배열에 속한 요소의 위치가 연속적이지 않은 배열을 의미함.

희소배열의 경우 배열의 length 프로퍼티 값보다 배열 요소의 개수가 언제나 적음

 

- 다차원 배열 

배열요소가 또 다른배열인 배열을 의미함

2차원배열이란 배열 요소가 1차원 배열인 배열을 의미함

 

- 연관 배열 (associative array)

숫자로 된 인덱스 대신에 문자열로 된 키(key)를 사용해 배열처럼 사용.

Array 객체가 아닌 기본 객체로 실제배열이 아님

 

- 문자열을 배열처럼 접근

문자열은 변하지 않는 값이므로, 읽기 전용 배열로 다룰 수 있음

 

 

 

** 함수(function) **

하나의 특별할 목적으로 작업을 수행하도록 설계된 독립적인 블록을 의미함.

필요할 때마다 호출하여 해당 작업을 반복하여 수행할 수 있음.

 

- 함수의 정의는 function키워드로 시작되며, 다음과 같은 구성요소를 가짐

  1. 함수의 이름

  2. 괄호안에 쉼표(,)로 구분되는 함수의 매개변수 (parameter)

  3. 중괄호 ({})로 둘러싸인 자바스크립트 실행문

 

- 문법)

   function 함수이름(매개변수1, 매개변수2...)

   {

        함수가 호출되었을 때 실행하고자 하는 실행문;

    }

 


* 예제 1213_3 (배열) *

 

* 예제 1213_3 (배열의 활용) *

 

* 예제 1213_3 (배열 요소 접근 <for in 문 활용>) *

 

* 예제 1213_3 (희소배열/다차원배열) *

 

* 예제 1213_3 (연관배열) *

 

* 소스 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트-배열</title>
</head>
<body>
    <h3>배열</h3>
    <script>
        //
        var arrList = [1, true, "JavaScript"];
        var arrObj = Array(1, true, "JavaScript");
        var arrNewObj = new Array(1, true, "JavaScript");

        document.write(arrList + "<br />");
        document.write(arrObj + "<br />");
        document.write(arrNewObj + "<br />");
    </script>
    
    <br /><br />
    <h2>배열의 활용</h2>
    <script>
        //배열의 요소 추가 , 삭제
        var arr = ["JavaScript"];
        var ele = arr[0];

        arr[1] = 10;
        arr[2] = ele;

        document.write("배열의 요소는 [" + arr + "] 입니다.<br />");
        document.write("배열의 길이는 " + arr.length + "입니다.<br />");

        delete arr[1];

        document.write("배열의 요소는 [" + arr + "] 입니다.<br />");
        document.write("배열의 길이는 " + arr.length + "입니다.<br /><br />");
        

        //배열의 요소 추가
        arr.push("Script");
        arr[arr.length] = 100;

        document.write("배열의 요소는 [" + arr + "] 입니다.<br />");
        document.write("배열의 길이는 " + arr.length + "입니다.<br />");

        arr[20] = "자바스크립트";

        document.write("배열의 요소는 [" + arr + "] 입니다.<br />");
        document.write("배열의 길이는 " + arr.length + "입니다.<br />");    //길이 : 21

        document.write("arr[10] : " + arr[10] + "<br />")   // undefined : 값이 없기에 타입이 정해지지 않아서
    </script>

<br /><br />
    <h3>배열 요소 접근</h3>
    <script>
        arr = [1, true, "Javascript"];
        var result = "<table border=1><tr>";

        for(var idx in arr){
            result += "<td>" + arr[idx] + "</td>";
        }

        result += "</tr></table>";

        document.write(result);
        document.write("<br /><br />");

        document.write("typeof arr : " + (typeof arr) + "<br />");
        document.write("typeof arr[0] : " + (typeof arr[0]) + "<br />");
        document.write("typeof arr[1] : " + (typeof arr[1]) + "<br />");
        document.write("typeof arr[2] : " + (typeof arr[2]) + "<br />");
    </script>

<br /><br />

    <h3>희소배열 / 다차원배열</h3>
    <script>
        //희소배열
        arr = new Array();
        arr[99] = "JavaScript"
        document.write("배열의 길이는 " + arr.length + "입니다.<br />");

        //다차원 배열
        arr = new Array(3);
        var row, column;

        for(row = 0 ; row < 3 ; row++){
            arr[row] = new Array(4);

            for(column = 0 ; column < arr[row].length ; column++){
                arr[row][column] = "[" + row + "," + column + "]";
                document.write(arr[row][column] + " ");
            }
            document.write("<br />");
        }
    </script>

    <br /><br />
    <h3>연관배열 / 문자열을 배열처럼 접근</h3>
    <script>
        //연관 배열
        arr = [];
        arr["하나"] = 1;
        arr["참"] = true;
        arr["자바스크립드"] = "JavaScript";

        document.write(arr["참"] + "<br />");
        document.write("arr.length : " + arr.length + "<br />");
        document.write("arr[0] : " + arr[0] + "<br /><br />");

        //문자열을 배열처럼 접근
        var str = "안녕하세요.";
        document.write("str.charAt(2) : " + str.charAt(2) + "<br />");
        document.write("str[2] : " + str[2] + "<br />");
    </script>
</body>
</html>

 




 

 

 

** 함수(function) **

하나의 특별할 목적으로 작업을 수행하도록 설계된 독립적인 블록을 의미함.

필요할 때마다 호출하여 해당 작업을 반복하여 수행할 수 있음.

 

- 함수의 정의는 function키워드로 시작되며, 다음과 같은 구성요소를 가짐

  1. 함수의 이름

  2. 괄호안에 쉼표(,)로 구분되는 함수의 매개변수 (parameter)

  3. 중괄호 ({})로 둘러싸인 자바스크립트 실행문

 

- 문법)

   function 함수이름(매개변수1, 매개변수2...)

   {

        함수가 호출되었을 때 실행하고자 하는 실행문;

    }

 

- 반환(return)문

함수는 반환문을 포함할 수 있음. 호출자는 함수에서 실행된 결과를 전달 받을 수 있음.

 

- 값으로서의 함수

함수가 변수에 대입될 수도 있으며, 다른 함수의 인수로 전달될 수 도 있음.

 

- 변수의 유효 범위

유효범위에 따라 -> 지역변수(lical variable) / 전역변수(global variable ) 로 구분됨.

cf) 선언되지 않은 변수에 대한 typeof 연산자의 결과값은 undefined을 반환.

 

· 지역변수

함수 내에서 선언된 변수를 가리킴

함수 내에서만 유효하며, 함수가 종료되면 메모리에서 사라짐

함수의 매개변수 또한 함수 내에서 정의되는 지역변수처럼 동작함

 

· 전역변수

함수 외부에서 선언된 변수

프로그램의 어느 영역에서나 접근 가능, 페이지가 닫히면 메모리 삭제

함수내부에서 var 키워드를 사용하지 않고 변수 선언하면 → 전역변수로 선언됨

 

cf) 전역변수와 같은이름의 지역변수 선언시 함수 내에서는 지역변수만 호출

     함수 내에서 같은 이름의 전역변수를 호출하려면 window. 붙여준다.

 

- 매개변수 

함수 정의시 매개변수의 타입을 따로 명시하지않으며, 함수 호출 시 인수(argument)로 전달된 값에 대해 어떠한 타입검사도 하지 않음

함수를 호출 할 때 함수의 매개변수보다 적은 인수가 전달되더라도 오류가 발생하지 않음.

(나머지 매개변수에 자동으로 undefined값을 설정)

 

 

 

 

 

 

 

* 예제 1213_4 (자바스크립트 함수) *

 

* 예제 1213_4 ( 값으로서 함수 / 변수유효범위 / 함수내에서 전역변수 사용법 window. / 매개변수 ) *

- head

- body

* 소스 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트(함수)</title>
    <script>
        function addNum(x, y){
            document.write("addNum 함수 호출<br />");
            return x + y;
        }

        function addNum2(x, y){
            document.write("addNum2(x, y) : " + (x + y) + "<br />");
        }


        function sqr(x){
            return x*x;
        }

        function localNum(){
            var num = 10;   //지역변수 / var 없음면 전역변수로 된다.
            num2 = 20;      //var선언 안하면 전역변수

            document.write("함수 내부에서 변수 num의 타입은 " + (typeof num) + "입니다.<br />");
            document.write("함수 내부에서 변수 num2의 타입은 " + (typeof num2) + "입니다.<br />");
        }

        var num = 10;
        function globalNum(){
            var num = 20;
            document.write("함수내에서 지역변수 num의 값은 " + num + "입니다.<br />");
            document.write("함수내에서 전역변수 num의 값은 " + window.num + "입니다.<br />");
        }

        function addNum3(x, y, z){
            return x+y+z;
        }

    </script>
</head>
<body>
    <h3>자바스크립트 함수</h3>
    <script>
        document.write("addNum(x, y) : " + addNum(2,3));
        document.write("<br /><br />");

        document.write("addNum() : " + addNum());
        document.write("<br /><br />");

        addNum2(13, "일 입니다.<br />");
    </script>

    <br /><br />
    <h4>값으로서의 함수</h4>
    <script>
        //값으로서의 함수
        var sqrNum = sqr;
        
        document.write("sar(4) : " + sqr(4) + "<br />");
        document.write("sqrNum(5) : " + sqrNum(5) );
    </script>

    <br /><br />
    <h4>변수 유효 범위 (지역변수/전역변수)</h4>
    <script>
        //변수 유효 범위 (지역변수/전역변수)
        localNum();

        document.write("함수 호출이 끝난 뒤 변수 num의 타입은 " + (typeof num) + "입니다.<br />");
        document.write("함수 호출이 끝난 뒤 변수 num2의 타입은 " + (typeof num2) + "입니다.<br />");
    </script>

    <br /><br />
    <h4>함수내에서 전역변수 사용시 앞에 window. 사용</h4>
    <script>
        //함수내에서 전역변수 사용시 앞에 window. 사용
        globalNum();

        //매개변수
        document.write("<br /><br />")
        document.write("1 : " + addNum3(1, 2, 3) + "<br />");
        document.write("1 : " + addNum3(1, 2) + "<br />");
        document.write("1 : " + addNum3(1) + "<br />");
        document.write("1 : " + addNum3() + "<br />");
    </script>
</body>
</html>

 

 

 

 

* 예제 1213_5  메소드 오버로딩 해보자 * → 맨 마지막의 메소드만 호출된다. ( 결과 : alert창의 값4가 네번나옴)

 

 

 


 

** Arguments 객체 **

- 함수 정의보다 더 많은 수의 인수가 전달되었을때 arguments객체를 이용하여

  함수로 전달된 인수의 총 개수를 확인하거나, 각각의 인수에도 바로 접근할 수 있다.

 

- 전달받은 인수의 개수에 상관없이 정상적인 계산을 수행할 수 있다.

- Arguments객체는 배열과 비슷하지만 Array객체는 아니므로, 인덱스와 . length프로퍼티만을 가지고 있을 뿐, 모든 것을 배열처럼 다룰 수는 없다.

 

 

 

** String 메서드 **

 

- 문자열에서 위치 찾기 메서드

String 인스턴스에서 특정 문자나 문자열이 처음으로 등장하는 위치 또는 마지막으로 등장하는 위치를 반환한다.

.indexOf()

.lastIndexOf()

전달 받은 특정 문자나 문자열을 찾을 수 없을 때는 -1을 반환한다..

 

- 문자열에서 지정된 위치에 있는 문자 반환

.charAt()

.

 

- 문자열 추출 메서드

String 인스턴스에서 전달받은 시작 인덱스부터 종료 인덱스 바로 앞까지의 문자열만을 추출하여 만든 새로운 문자열을 반환한다.

.slice(a, b)       →     a : 시작인덱스 / b : 끝인덱스 +1    <a부터 b-1인덱스 까지 추출>.substring()     →     슬라이스와 동일.substr(a, b)     →    a : 시작인덱스 / b : 문자갯수

 

str.slice(-4, -2);      //음수로 전달된 인덱스는 문자열의 뒤에서부터 시작함 (뒤는 1부터 시작)

 

 

- 문자열 주위의 공백 제거 메서드

String인스턴스의 양끝에 존재하는 모든 공백과 줄 바꿈 문자를 제거한 새로운 문자열 반환한다.

.trim()

 

- 문자열 분리 메서드

String인스턴스를 구분자를 기준으로 나눈 후 , 나눈 문자열을 하나의 배열로 반환한다.

.split();     //()안에 들어가는 기준으로 나눈다.  

split("")   : 한문자씩 나눔 (공백도 한문자로 취급한다.)

split(" ")  : 띄어쓰기를 기준으로 나눔 (나뉜 후 띄어쓰기부분만 사라짐)

split(!)     : 느낌표를 기준으로 나눔 (나뉜 후 !는 없다. !이외 공백이나 다른요소들을 그대로 유지)

Split메서드는 인수로 구분자를 전달하지 않으며, 전체 문자열을 하나의 배열 요소로 가지는 길이가 1일 배열을 반환

 

- 문자열의 대소문자 변환 메서드

String인스턴스의 모든 문자를 대문자나 소문자로 변환한 새로운 문자열을 반환함.

.toUpperCase();    // 전부 대문자로 변환

.toLowerCase();    // 전부 소문자로 변환

 

** Array메서드 **

Array 객체에 정의된 배열과 관련된 작업을 할 때 사용하는 메서드

Array.prototype 메서드

push() 메서드 : 하나 이상의 요소를 가장 마지막에 추가

 

- pop() 메서드 

배열의 가장 마지막 요소를 제거하고, 그 제거된 요소를 반환함.

pop() 메서드를 실행할 때마다 배열의 길이를 1 씩 줄어들게됨.

cf) delete 는 배열의 길이는 변하지 않고 해당위치의 요소를 삭제 / pop 해당 요소를 제거하고 배열도 줄어듬

 

- shift() 메서드

배열의 가장 마지막 요소가 아닌 첫 요소를 제거하고, 그 제거된 요소를 반환한다.

실행할 때 마다 배열의 길이가 1 씩 줄어들게됨.

 

- reverse() 메서드 

배열 요소의 순서를 뒤집는다.

 

- splice() 메서드

배열 요소를 제거하거나 새로운 배열요소를 추가하여 내용을 변경한다.

첫번째 인수 : 새로운 요소가 삽입될 위치의 인덱스

인수 : 제거할 요소의 개수

그후 인수들 : 모두 배열 요소로서 지정된 인데스부터 차례대로 삽입

이 메소드는 배열에서 제거된 요소를 배열의 형태로 반환하며, 아무요소도 제거되지 않았으면 빈 배열 반환.

 

 

 


* 예제 1213 

* 소스 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트</title>
    <script>
        function addNum(){
            var sum = 0,i;

            for(i = 0 ; i < arguments.length ; i++){
                sum += arguments[i];
            }
            return sum;
        }
    </script>
</head>
<body>
    <h3>arguments 객체</h3>

    <script>
        // argument 객체
        document.write("addNum(1,2,3) : " + addNum(1,2,3) + "<br />");
        document.write("addNum(1,2) : " + addNum(1,2) + "<br />");
        document.write("addNum(1) : " + addNum(1) + "<br />");
        document.write("addNum() : " + addNum() + "<br />");
        document.write("addNum(1,2,3,4,5,6,7,8,9,10) : " + addNum(1,2,3,4,5,6,7,8,9,10) + "<br />");
    </script>

    <br /><br />
    
    <h3>String 메소드 - 위치찾기 / 지정된위치의 문자 반환 / 문자열 추출</h3>
    <script>
        var str = "abcEDFabc";

        //문자열에서 위치찾기
        document.write("indexOf('abc') : " + str.indexOf("abc") + "<br />");
        document.write("indexOf('abcd') : " + str.indexOf('abcd') + "<br />");
        document.write("indexOf('abc', 3) : " + str.indexOf("abc", 3) + "<br />");
        document.write("lastindexOf('abc') : " + str.lastIndexOf("abc") + "<br />");
        document.write("indexOf('d') : " + str.lastIndexOf("d") + "<br />");
        document.write("indexOf('c') : " + str.lastIndexOf("c") + "<br /><br />");

        //문자열에서 지정된 위치의 문자 반환
        document.write("str.charAt(0) : " + str.charAt(0) + "<br />");
        document.write("str.charAt(10) : " + str.charAt(10) + "<br /><br />");

        //문자열 추출
        str = "abcDEFabc";

        document.write("slice(2, 6) : " + str.slice(2, 6) + "<br />");
        document.write("slice(-4, 2) : " + str.slice(-4, -2) + "<br />");
        document.write("slice(2) : " + str.slice(2) + "<br />");
        document.write("substring(2, 6) : " + str.substring(2, 6) + "<br />");
        document.write("substr(2, 3) : " + str.substr(2, 4) + "<br /><br />");
        
    </script>

    <br /><br />  
    <h3>String 메소드2 - 공백제거 / 문자열분리 / 문자열의 대소문자 변환</h3>
    <script>
        //공백제거
        var temp = "      java script     ";
        document.write("[" + temp + "],length : " + temp.length + "<br />");
        document.write("[" + temp.trim() + "], length : " + temp.trim().length + "<br /><br />");

        //문자열 분리
        str = "자바스크립트는 너무 멋져요! 그리고 유용해요.";
        document.write("str.split() : " + str.split() + "<br />");
        document.write("str.split('') : " + str.split("") + "<br />");
        document.write("str.split(' ') : " + str.split(" ") + "<br />");
        document.write("str.split('!') : " + str.split("!") + "<br /><br />");
        
        const arr = str.split(" ");     //const : 상수정의
        document.write("arr.length : " + arr.length + "<br />");
        document.write("arr[0] : " + arr[0] + "<br />");
        document.write("arr[1] : " + arr[1] + "<br />");
        document.write("arr[2] : " + arr[2] + "<br />");
        document.write("arr[3] : " + arr[3] + "<br /><br />");

        str = "Javascript";

        document.write("toUppercase() : " + str.toUpperCase() + "<br />");
        document.write("toLowercase() : " + str.toLowerCase() + "<br /><br />"); 
    </script>

    <br /><br />  
    <h3>Array 메소드3 - Array메서드</h3>
    <script>
        
        // Array 메서드 - push
        var arr1 = [1, true, "Java Script"];

        document.write("arr1.length : " + arr1.length + "<br />");
        arr1.push("자바스크립트");
        document.write("arr1.length : " + arr1.length + "<br />");
        document.write("arr1 : " + arr1 + " <br />");
        arr1.push(2, "거짓");
        document.write("arr1.length : " + arr1.length + "<br />");
        document.write("arr1 : " + arr1 + "<br /><br />");

        //pop() 메서드
        document.write("arr1.pop() : " + arr1.pop() + " <br />");
        document.write("arr1.length : " + arr1.length + " <br />");
        document.write("arr1.pop() : " + arr1.pop() + " <br />");
        document.write("arr1.length : " + arr1.length + " <br />");
        document.write("arr1.pop() : " + arr1.pop() + " <br />");
        document.write("arr1 : " + arr1 + " <br /><br />");

        //shift() 메서드
        document.write("arr1.shift() : " + arr1.shift() + " <br />");
        document.write("arr1.length : " + arr1.length + " <br />");
        document.write("arr1.shift() : " + arr1.shift() + " <br />");
        document.write("arr1.length : " + arr1.length + " <br />");
        document.write("arr1 : " + arr1 + " <br /><br />");
    </script>

</body>
</html>

 




 

 

** 문서 객체 모델 (DOM) **

문서 객체 모델 HTML문서에 접근하기 위한 일종의 인터페이스.

이 객체 모델은 문서 내의 모든 요소를 정의하고, 각각의 요소에 접근하는 방법을 제공

 

출처 :&nbsp;https://tcpschool.com/javascript/js_dom_concept

 

- 객체 모델을 이용한 작업

새로운 HTML요소나 속성을 추가

존재하는 HTML요소나 속성을 제거

HTML문서의 모든 HTML요소를 변경

HTML문서의 모든 HTML속성을 변경

HTML문서의 모든 CSS스타일을 변경

HTML문서의 새로운 HTML이벤트 추가

HTML문서의 모든 HTML이벤트에 반응

 

HTML DOM은 HTML문서를 조작하고 접근하는 표준화된 방법을 정의함.

 

* Document 객체

웹페이지 그자체를 의미하며, 웹페이지에 존재하는 HTML 요소에 접근하고자 할 때는 반드시 Document객체부터 시작해야한다.

 

-HTML 요소 선택

document.getELementsById

 

- 아이디 (id) 를 이용한 선택

 

- Name 속성을 이용한 선택

getElementsByName() 은 HTML요소의 name속성을 이용해 HTML요소를 선택

name 속선값이 같은 모든 요소를 선택한다.

 

- CSS선택자(selector)를 이용한 선택

quarySelectorAll() 메서드는 CSS선택자(아이디, 클래스, 속성, 속성값 등)를 이용해 HTML 요소를 선택

quarySelectorAll() 메소드는 익스플로럴8 과 그 이전 버전은 지원하지 않음.

 

- HTML 객체 집합(object coloection)을 이용한 선택

객체 집합(object collection)을 이용하여 HTML용소를 선택

 

- DOM 요소의 내용변경

HTML 요소의 내용(content)이나 속성값 등을 손쉽게 변경.

HTML 요소의 내용을 변경하는 가장 쉬운 방법은 innerHTML 프로퍼티를 이용.

 

- DOM 요소의 스타일 변경

예 )

var str = document.getElementById("text");      //아이디가 "str"인요소를 선택함

function changeRedColor(){ str.style.color = "red";}

 

https://tcpschool.com/javascript/js_dom_document

 

 

 

* 소스

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>DOM요소</title>
    <script>
        //모든 li요소를 선택하여 텍스트 색상 변경
        function fn_tag(){
            var selectedItem = document.getElementsByTagName("li");
            var i;

            for(i = 0 ; i < selectedItem.length ; i++){
                selectedItem.item(i).style.color = "orange";     //선택된 요소의 텍스트 색상 변경.
            }
        }

        //아이디를 이용하여 선택한 후 텍스트 변경(단, 아이디가 여러개인 경우 첫번쨰만 적용됨)
        function fn_id(){
            var selectItem = document.getElementById("even");
            selectItem.style.color = "red";
        }
    </script>
</head>
<body>
    <h2>모든 li 요소 선택</h2>
    <ul>
        <li id="even">월요일</li>
        <li>화요일</li>
        <li name="first">수요일</li>
        <li>목요일</li>
        <li name="first">금요일</li>
        <li id="even">토요일</li>
        <li id="even">일요일</li>
    </ul>
    <input type="button" value="li태그로 선택" onclick="fn_tag()" />
    &nbsp;
    <input type="button" value="id가 even선택" onclick="fn_id()" />
    
    <script>

        // name을 이용한
        var selectI = document.getElementsByName("first");

        for( i = 0 ; i < selectI.length ; i++){
            selectI.item(i).style.color = "blue";
        }

        // title 요소 선택
        var title = document.title;
        document.write(title + "<br /><br />");
    </script>

    <h2>DOM 요소의 스타일 변경</h2>
    <p id="text">이부분의 스타일이 변경됩니다.</p>
    <input type="button" value="빨간색 변경" onclick="redColor()" />
    &nbsp;
    <input type="button" value="검정색 변경" onclick="blackColor()" />

    <script>
        var str = document.getElementById("text");  
        //스크립트를 이곳에 쓴 이유  
        //document.getElementById("text")는   <p id="text">이부분의 스타일이 변경됩니다.</p>이 선언된 후 사용되기 때문
        function redColor(){
            str.style.color = "red";
        }
        function blackColor(){
            str.style.color = "black";
        }
    </script>
</body>
</html>

 

 

 

 

 

 

** 삼항연산자 **

: if else 문을 삼항 연산자를 이용해 간단히 표현가능

문법)표현식?반환값1:반환값2;

 

** switch 문 **

문법)switch (조건값){

case1: 조건 값이 값1일 떄 실행하고자 하는 실행문;

break;

case2: 조건 값이 값2일 떄 실행하고자 하는 실행문;

break;

...

dufault:

{ 조건값이 어떠한 case절에도 해당하지 않을 때 실행하고자 하는 실행문; }

 

- default 절의 위치가 반드시 switch 문의 맨 마지막일 필요는 없음

 

** 문제 1212 **

        /*
        문제)과목 점수를 입력을 받아 학점을 출력하는 프로그램
             과목점수는 0~100점 이며, 범위가 초과되면 "0~100점 사이 값을 입력하세요." 라고 화면에 출력.
             (화면에 출력 document.write 사용)
             과목점수가 정상 입력되었을 경우.
             90~100 : A, 80~89 : B, 70~79 : C, 60~69 : D, 나머지 : F 로 학점(grade)를 구하고
             A인 경우 "잘했습니다."
             B인경우 "잘했습니다."
             C인 경우 "조금만 노력하면 잘 할수 있습니다."
             D인 경우 "좀 더 노력하세요"
             F인 경우 "많이 노력하기 바랍니다."
        입력예)과목점수를 입력하세요.
               85
        출려계)잘했습니다.
               당신의 학점은 B입니다. (단, B는 <b>태그 이용)
        단, 출력은 document.write로 사용.
        */

* 소스 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>학점 환산 프로그램</title>
</head>
<body>
    <script>
        var score = parseInt(prompt("점수를 입력하세요."));
        var grade="";

        if(score < 0 && 100 < score){
        document.write("0~100점 사이 값을 입력하세요.");
        }

        else{
            if(score >= 90){
            grade = "A";
            document.write("아주 잘했습니다.<br />");
            }
            else if(score >= 80){
                grade = "B";
                document.write("잘했습니다.<br />");
            }
            else if(score >= 70){
                grade = "C";
                document.write("조금만 노력하면 잘 할수 있습니다.<br />");
            }
            else if(score >= 60){
                grade = "D";
                document.write("좀 더 노력하세요<br />"); 
            }
            else{
                grade = "F";
                document.write("많이 노력하기 바랍니다.<br />"); 
            }
            document.write("당신의 점수는 <b>" + grade + "</b>입니다.");
        }

    </script>
    
</body>
</html>

** 1212_2 예제 (switch문 오늘 요일 출력) **

 

** 1212_2  문제 1 (커피 주문) **

        /*
        문제)커피를 주문하는 과정 중 어떤 커피를 주문 할 지 입력을 받은 후 출력하는 프로그램
        입력예)무슨 커피 드릴까요?
               아이스아메리카노
        출력예)아이스아메리카노 1500월 입니다.
        단, 아이스아메리카노(icecoffee) : 1500
            카페라떼 : 4500
            바닐라라떼 : 5500
            나머지는 '000은(는) 없습니다.'
            출력시 금액이 있는 경우가 정상적인 경우로 판다.
        */   

 

* 1212_2  문제 2 (요일별 영업) *

        /*
        문제)요일을 입력받아 정상영업인지 휴무일인지 알려주는 스크립트 구현.
             입력은 prompt()함수 사용.
             월화수목금은 정상영업, 토일은 휴무라고 출력
        입력예)요일을 입력하세요.
               화
        출력예)화요일은 정상영업
        단, 출력을 switch문에서 처리.
            ...요일은 정상영업 / ...요일은 휴무 / ...은 요일이 아닙니다.
        */

 

 

** 1212_2  문제 3 (성적) **

        /*
        문제)성적 A~F 값을 입력 받아 출력.
        입력예)성적을 입력하세요.
               a
        출력예)아주 잘했습니다.
        단, 성적입력은 A,B,C,F에 대해서만 처리하며 성적은 무조건 대문자로 처리하게 함.
            (대문자 변환 함수 : 변수명.toUpperCase())
            입력변수 grade 한개만 사용하여 처리.
            A : 아주 잘했습니다., B : 좋은 점수군요., C : 조금 더 노력하세요. , F : 다음 학기 수강하세요.
            나머지 : 알 수 없는 학점입니다.
            메세지 출력은 alert으로 처리.
        */

 

* 소스 1212_2 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>제어문(switch)</title>
</head>
<body>
    <script>
        var day;
        var week = new Date().getDay();     //0(일요일)~6(토요일)
        /*
        switch(week){
            case 0:
                day = "일요일";
                break;
            case 1:
                day = "월요일"; break;
            case 2:
                day = "화요일";
                break;
            case 3:
                day = "수요일";
                break;
            case 4:
                day = "목요일";
                break;
            case 5:
                day = "금요일";
                break;
            case 6:
                day = "토요일";
                break;
            default:
                day = "없는 요일";
            }
        document.write("<h1>오늘은 <b>" + day + "</b>입니다.<h1");
        */


        /* 1
        문제)커피를 주문하는 과정 중 어떤 커피를 주문 할 지 입력을 받은 후 출력하는 프로그램
        입력예)무슨 커피 드릴까요?
               아이스아메리카노
        출력예)아이스아메리카노 1500월 입니다.
        단, 아이스아메리카노(icecoffee) : 1500
            카페라떼 : 4500
            바닐라라떼 : 5500
            나머지는 '000은(는) 없습니다.'
            출력시 금액이 있는 경우가 정상적인 경우로 판다.
        
        
        var type = prompt("무슨 커피 드릴까요?");
        var price="";       
        //var price="" 초기값을 세팅하지 않으면 if(price != undefined) 또는 0으로 세팅 후 (price != 0)으로 가능

        switch(type){
            case ("아이스아메리카노"):
            case ("icecoffee"):
                price = 1500;
                break;
            case "카페라떼":
                price = 4500;
                break;
            case "바닐라라떼":
                price = 5500;
                break;
            default:
                document.write(type + "은(는) 없습니다.");
        }
        
        if(price != ""){document.write(type + " " + price + "원 입니다.");}
        */


        /* 2
        문제)요일을 입력받아 정상영업인지 휴무일인지 알려주는 스크립트 구현.
             입력은 prompt()함수 사용.
             월화수목금은 정상영업, 토일은 휴무라고 출력
        입력예)요일을 입력하세요.
               화
        출력예)화요일은 정상영업
        단, 출력을 switch문에서 처리.
            ...요일은 정상영업 / ...요일은 휴무 / ...은 요일이 아닙니다.
        
        
        var day = prompt("요일을 입력하세요.");

        switch(day){
            case '월':
            case '화':
            case '수':
            case '목':
            case '금':
                document.write(day + "요일은 정상영업");
                break;
            case '토':
            case '일':day
                document.write(day + "요일은 휴무");
                break;
            default:
                document.write(day + "은 요일이 아닙니다.");
        }
        */

        /* 3
        문제)성적 A~F 값을 입력 받아 출력.
        입력예)성적을 입력하세요.
               a
        출력예)아주 잘했습니다.
        단, 성적입력은 A,B,C,F에 대해서만 처리하며 성적은 무조건 대문자로 처리하게 함.
            (대문자 변환 함수 : 변수명.toUpperCase())
            입력변수 grade 한개만 사용하여 처리.
            A : 아주 잘했습니다., B : 좋은 점수군요., C : 조금 더 노력하세요. , F : 다음 학기 수강하세요.
            나머지 : 알 수 없는 학점입니다.
            메세지 출력은 alert으로 처리.
        */

        var grade = prompt("성적을 입력하세요.");
        grade = grade.toUpperCase();   //var grade = prompt("성적을 입력하세요.").toUpperCase();

        switch(grade){
            case 'A':
                alert("아주 잘했습니다.");
                break;
            case 'B':
                alert("좋은 점수군요.");
                break;
            case 'C':
                alert("조금 더 노력하세요.");
                break;
            case 'F':
                alert("다음 학기 수강하세요");
                break;
            default:
                alert("알 수 없는 학점입니다.");
        }


    </script>
</body>
</html>

** 1212_3 문제 (숫자 맞추기 게임)**

* <head>에 함수 정의 해보기 *

<body>
    <h1>숫자 맞추기 게임</h1>
    이 게임은 컴퓨터가 생성한 숫자를 맞추는 게임입니다. 숫자는 1부터 100사이에 있습니다.<br />
    숫자 : <input type="text" id="user" size="5" />
    <input type="button" value="확인" onclick="guess()" /><br />
    추측 횟수 : 
    <input type="text" id="guesses" size="5">
    힌트 : <input type="text" id="result" size="16" />
</body>

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>숫자 맞추기 게임</title>
    <script>
        /*
        입력값이 낮을 경우는 '낮습니다.', 높을 경우는 '높습니다.', 맞은 경우는 '성공입니다.'
        */
        var computerNumber = 53;
        var nGuessess = 0;
        var cnt = 0;
        //myNumber = document.getElementById("user").value; 
        //-> 헤드가 먼저 실행되기 때문에 document.getElementById("user").value 아직 없다. 따라서 바디 안의 무언가 가지고오려면 함수 안에서 하는 것이 좋다.

        function guess(){
            if(cnt==1){nGuessess=0; cnt=0;}
            
            var result = "";
            myNumber = document.getElementById("user").value;
            nGuessess++; //어떤 경우든 시도는 한 것이기에 확인버튼 누를 시 증가하도록 후 맨 아래에 값 대입
            
            
            if(myNumber < computerNumber){
                result = myNumber + "보다 높습니다..";
                alert("틀렸습니다.");
                document.getElementById("user").value = "";
                document.getElementById("user").focus();

            }
            else if(myNumber > computerNumber){
                result = myNumber + "보다 낮습니다..";
                document.getElementById("user").focus();
                alert("틀렸습니다.");
                document.getElementById("user").value = "";
                document.getElementById("user").focus();
            }
            else if(myNumber == computerNumber){
                result = "성공입니다!";
                cnt=1;
            }
            else{
                document.getElementById("result").value = '숫자를 입력하세요';
                alert("숫자를 입력하세요.");
                document.getElementById("user").value = "";
                document.getElementById("user").focus();
            }
            
            document.getElementById("guesses").value = nGuessess;
            document.getElementById("result").value = result;
        }
    </script>
</head>
<body>
    <h1>숫자 맞추기 게임</h1>
    이 게임은 컴퓨터가 생성한 숫자를 맞추는 게임입니다. 숫자는 1부터 100사이에 있습니다.<br />
    숫자 : <input type="text" id="user" size="5" />
    <input type="button" value="확인" onclick="guess()" /><br />
    추측 횟수 : 
    <input type="text" id="guesses" size="5">
    힌트 : <input type="text" id="result" size="16" />
</body>
</html>

 


* 반복문 : 같은 명령을 일정횟수만큼 반복하여 수행하도록 제어하는 실행문

while 문 

do / while 문

for문

for / in 문

for / of 문

 

cf) 하나의 태그에 열고닫고 <br /> <input />

 


** 문제 1212_5 (구구단표 작성해보기) **

 


** 문제 1212_6 (prompt / innerHTML 두가지로 구구단 출력해보자) **

       /*
        문제) 구구단을 작은 수와 큰 수 순서로 입력받아 구구단 출력하는 프로그램
        입력예)시작단을 입력하세요.2
               끝단을 입력하세요.3
        출력예)2단
               2 * 1 =2
               ...
               2 * 9 = 18

               3단
               3 * 1 = 3
               ...
               3 * 9 = 27
        단, 입력받은 값은 숫자로 변환함.
            1. prompt 사용하여 구구단출력
            2. html imput=text에서 입력받아 버튼 클릭시 구구단 출력
               시작단 : num1 , 끝단 : num2 버튼 클릭시 호출함수는 gugu()
               <p id="tab"></p> : 이부분에 구구단 출력
        */

* 방법1

 

* 방법 2

 

→방법2 <head> 

<script> 속 함수

 

 

 

 

 

 

 

 

 

* 소스

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>반복제어문</title>
    <script>
        /*
        문제) 구구단을 작은 수와 큰 수 순서로 입력받아 구구단 출력하는 프로그램
        입력예)시작단을 입력하세요.2
               끝단을 입력하세요.3
        출력예)2단
               2 * 1 =2
               ...
               2 * 9 = 18

               3단
               3 * 1 = 3
               ...
               3 * 9 = 27
        단, 입력받은 값은 숫자로 변환함.
            1. prompt 사용하여 구구단출력
            2. html imput=text에서 입력받아 버튼 클릭시 구구단 출력
               시작단 : num1 , 끝단 : num2 버튼 클릭시 호출함수는 gugu()
               <p id="tab"></p> : 이부분에 구구단 출력
        */
        function gugu(){
            var i,j;
            var result = "";    //누적하려면 초기값 세팅해줘야한다.

            var n1 = document.getElementById("num1").value;
            var n2 = document.getElementById("num2").value;

            for(i = n1; i<=n2 ; i++){
                result += "<br />" + i + "단<br />";
                for(j=1 ; j<10 ; j++){
                    result += i + ' * ' + j + " = " + i*j + "<br />"
                }
            }

            /*
            //위의 포문과 같은 방법
            for(i=n1 ; i<=n2 ; i++){
                document.getElementById("tab").innerHTML += "<br ?>" + i + "단<br />";
                for(j=1 ; j<10 ;j++){
                    document.getElementById("tab").innerHTML += i + ' * ' + j + " = " + i*j + "<br />";
                }
            }
            */
            
            // document.getElementById("tab").innerHTML = result;
        }
    </script>
</head>
<body>
    
    <!-- 방법1. -->

    <!-- <script>
        num1 = parseInt(prompt("시작단을 입력하세요."));
        num2 = parseInt(prompt("끝단을 입력하세요."));
        var i,j;

        for(i = num1; i<=num2 ; i++){
            document.write("<br />" + i + "단<br />");
            for(j=1 ; j<10 ; j++){
                document.write(i + ' * ' + j + " = " + (i*j) + "<br />");
            }
        }

    </script> -->

    <!-- 방법2 -->

    시작단을 입력하세요. <input type="text"  name="num1" id="num1" size="3" >&nbsp;   
    끝단을 입력하세요. <input type="text" name="num2" id="num2" size="3">

    <input type="button" name="chk" onclick="gugu()" value="확인" /><br />

    <p id="tab">여기에 innerHTML을 이용해 구구단출력을 해요(덮어쓰기)</p>
</body>
</html>

** 문제 1212_7 (3의 배수를 제외한 숫자 출력_continue / continue사용 x) **

/* 1212_7
문제) for문을ㅣ용하여 1~100까지 출력하며 3의 배수는제외하고출력하는 스크립트 작성(continue문 사용)
출력예)1 2 4 5 7 8 10 11 ..... 100
*/

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>반복제어문</title>
</head>
<body>
    <script>
        /* 1
        문제) for문을ㅣ용하여 1~100까지 출력하며 3의 배수는제외하고출력하는 스크립트 작성(continue문 사용)
        출력예)1 2 4 5 7 8 10 11 ..... 100
        */
        var i;
        // for(i = 1 ; i <= 100 ; i++){
        //     if(i%3==0){
        //         continue;
        //     }
        //     document.write(i+"&nbsp");
        // }

        //위와 동일한 결과로 continue 사용하지 않고 결과 출력
        for(i=1 ; i < 100 ; i++){
            if(i%3==0){
                document.write(i+" ");
            }
        }
    </script>
    <br /><br />

    <h1>for/ in 문</h1>
    <script>
        var arr = [3,4,5];

        for(var i = 0 ; i < arr.length ; i++){
            document.write(arr[i] + " ");
        }

        document.write("<br /><br />");

        for(var i in arr){
            document.write(arr[i] + " ");
        }

        /* 2
        문제)구구단을 출력하는 스크립코드 작성.
             시작단과 끝단을 prompt로 입력받아 작은단에서부터 큰단을 출력하는 스크립트 작성.
             단, 시작단 입력 변수는 num1, 끝단 입력 변수는 num2 로 하되 작은단부터 출력을 위해
             변수는 num1부터 num2까지 출력(작은단에서 큰단으로 출력)
        입력예)시작단을 입력하세요.
               5
               끝단을 입력하세요.
               3
        출력예)3단
               3 * 1 = 3
               ...
               3 * 9 = 29

               5단
               5 * 1 = 5
               ...
               5 * 9 = 45
        */
        document.write("<br /><br />");
        var num1,num2,tmp;
        var i,j;

        num1 = parseInt(prompt("시작단을 입력하세요.", "숫자로 입력하세요"));
        num2 = parseInt(prompt("끝단을 입력하세요.", "숫자로 입력하세요"));

        if(num1 > num2){
            tmp = num1;
            num1 = num2;
            num2 = tmp;
        }
        for(i=num1 ; i<=num2 ; i++){
            document.write("<b>" + i + "단 </b><br />");
            for(j=1 ; j<=9 ; j++){
                document.write(i + " * " + j + " = " + (i*j) + "<br />");
            }
            document.write("<br />");
        }
    </script>
</body>
</html>

 




 

** for / in 문 **

- 해당 객체의 열거할 수 있는 모든 프로퍼티는 순회할 수 있도록 해줌.

문법 ) for(변수 in 객체){

                 객체의 열거할 수 있는 모든 프로퍼티의 개수만큼 반복적으로 실행하고자 하는 실행문;      }

 

 


** 문제 1212_7 (구구단출력) **

 

 

 

 

 

 

 

 

 

 

 

 

https://ofcourse.kr/

 

 

 

 

 

 

 

 

 

** 1208_7 (리스너 / 자바스크립트 함수 호출) **

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>연산자</title>\
    <script>
        function over(obj){
            obj.src = "./img/computer2.jpeg" ;
        }

        function out(obj){
            obj.src = "./img/computer1.jpeg";
        }
    </script>
</head>
<body>
    <!--연산자-->
    <h1>연산자</h1>

    <script>
        var x = 3, y = 5;
        var a = "abc", b = "bcd";
        
        document.write((x > y) + "<br />");         //false
        document.write((a <= b) + "<br />");        //true(알파벳 a보다 b가 큼. 변수 맨 앞자리부터 체크)
        document.write((x < a) + "<br />");         //false(숫자와 문자열 비교 불가)
        
        x = 3, y = '3', z = 3;
        document.write((x == y) + "<br />");        //true(값이 같으므로)
        document.write((x === y) + "<br />");       //false(값은 같으나 타입이 다르므로)
        document.write((x === z) + "<br />");       //true(값과 타입이 같으므로)
    </script>
    <br /><br />
    <h1>delete 연산자</h1>
    <script>
        var arr = [1,2,3];
        document.write("삭제 전 : " + arr + "<br />");
        delete arr[2];
        document.write("삭제 후 : " + arr + "<br />");
        document.write("arr[2] : " + arr[2] + "<br />");
        document.write("arr.length : " + arr.length + "<br />");
    </script>
    <br />
    <h2><a href="javascript:void(0)">링크는 동작하지 않습니다.</a></h2>
    <h2><a href="javascript:void(document.body.style.backgroundColor='yellow')">링크는 동작하지 않지만 HTML문서 배경은 변경됨.</a></h2>
    <br /><br />

    <!--이벤트 리스너 속성-->
    <h3>이미지 위에 마우스를 올려 보세요.</h3>
    <img src="./img/computer1.jpeg" alt="컴퓨터1" width="300" height="200" onmouseover="this.src='./img/computer2.jpeg'" onmouseout="this.src='./img/computer1.jpeg'" />
    <br /><br />

    <!--(head의)자바스크립트 함수 호출-->
    <h3>이미지 위에 마우스를 올려 보세요.2</h3>
    <img src="./img/computer1.jpeg" alt="컴퓨터2" width="300" height="200" onmouseover="over(this)" onmouseout="out(this)" />
</body>
</html>​

 

→ 마우스 올리면 computer2로 이미지 바뀜

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


** 제어문 **

- 프로그램의 순차적인 흐름을 제어해야 할 때 사용하는 실행문, 제어문에는 조건문과 반복문.

 

- 조건문 : if 문 / if else 문 / else if 문/ else문 / switch 문

  문법 ) if(표현식){      표현식의 결과가 참일 때 시행하고자 하는 실행문;      }

 

              if(표현식){      표현식의 결과가 참일 때 시행하고자 하는 실행문;      }

             else{      표현식의 결과가 참일 때 시행하고자 하는 실행문;      }

 

             if(표현식1){      표현식1의 결과가 참일 때 시행하고자 하는 실행문;      }

             else if(표현식2){      표현식2의 결과가 참일 때 시행하고자 하는 실행문;      }

             else{      표현식의 결과가 참일 때 시행하고자 하는 실행문;      }

 

 

 

 

 


** 1211 (예제/문제/문제/문제) **

/ /trim() : 공백제거

 





** 1211_2 (문제/문제) **


 

 

* 위 문제의 cal 함수를 .js 파일로 빼서 사용해보기

 

-> 원래있던 cal 함수 주석처리 후

<script src="./js/sample2.js"></script> 입력하면 같은 결과 나옴다.

 

 

 

* 소스 코드

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트-제어문</title>
    <script>
        function cal(){

        }
    </script>
</head>
<body>
    <script>
        /* 1
        문제) prompt()함수를 이용하여 점수를 입력받아 if~else를 사용하여 A~F까지 학점을 출력하는 스크립트 코드작성.
        입력예) 점수를 입력하세요.
                90
        출력예) 90점은 A입니다.
        단, 90~100 : A, 80~89 : B, 70~79 : C, 60~69 : D, 나머지 F
            document.write()는 한번만 실행.
        
        var score = prompt("점수를 입력하세요.");
        if(score < 60){
            result = "F";
        }
        else if(score < 70){
            result = "D";
        }
        else if(score < 80){
            result = "C";
        }
        else if(score < 90){
            result = "B";
        }
        else{
            result = "A";
        }
        
        document.write(score + "점은 " + result + "입니다.");

    
        */


        /* 2
        문제)짝홀수 맞추기 게임
             숫자를 입력받고 계산하기 버튼 클릭 후 해당하는 함수에서 처리하는 순서
             1. 입력값을 number1변수에 대입 
                document.폼네임.해당이름.value (예 : var tmp = document.fff.num1.value;)
             2. 숫자가 입력되지 않았을 때 처리 (2번까지만 실행하고 해당 함수는 처리 끝.)
                alert으로 "값을 입력하세요." 
                실행 후 커서를 해당 위치로 가게 함.(document.폼네임.해당이름.focus())
             3. 숫자가 입력되었는지 확인
                숫자입력 확인은 isNaN(입력변수) true면 숫자가 아님.
                숫자가 아니면 alert으로 "숫자만 입력 가능합니다. 다시 입력하세요."
                실행 후 커서를 해당 위치로 가게 하고 처리 끝
             4. 여기 실행 조건은 값이 입력되었고, 입력값이 숫자인 경우 실행.
                입력 값을 숫자로 변경한 후 짝/홀수 체크해서 alert으로 "짝수입니다."또는 "홀수입니다."라고 출력.
        단, 서버 프로그램은 1211.html 로 하고, 서버 전송 방식은 get으로 함.
        */
       
        
        function cal(){
            var number1 = document.form1.num1.value;        //name으로 조회
            var number1 = document.getElementById("num1").value;

            if(number1==""){        //if(document.form1.num1.value=="")
                alert("값을 입력하세요");
                document.form1.num1.focus();
                return;
            }
            if(isNaN(number1)){
                alert("숫자만 입력 가능합니다. 다시 입력하세요." );
                document.form1.num1.value = "";
                document.form1.num1.focus();
                return;
            }

            number1 = parseInt(number1);

            if(number1%2 == 0){
                alert("짝수입니다.");
            }
            else{
                alert("홀수입니다.");
            }

            if(confirm("서버로 보내시겠습니까?")){
                //확인버튼 선택시 처리
                document.form1.submit();
            }
        }

    </script>


    <h1>짝홀수 맞추기 게임</h1>
    값을 입력하세요.
   
    <form action="1211.html" name="form1" method="get">
        
        숫자 : <input type="text" id="num1" name="num1" size="5" />
        &nbsp;
        <input type="button" name="result" onclick="cal()" value="계산하기" />
    </form>
</body>
</html>

** 1211_3 (로그인 성공/실패) **

* 실행은 1211_3실행

 


** 1211_4 (자바스크립트_학점매기기게임) **

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트-학점매기기 게임</title>
    <script>
        /*
        문제)채점 버튼 클릭 시 체크 사항
             1. 점수를 입력했는지 체크, 안되어 있을 경우 "점수를 입력하세요." 띄워주고 커서를 점수란으로 보내기
             2. 점수가 입력이 되었으면 숫자인지 체크. 아닌경우 "점수는 숫자로만 입력하세요." 띄워주고
                기존값은 초기화 한 후 커서를 점수란으로 보내기
             3. 점수를 숫자로 타입을  변경하고 90점이상은 A, 80점대는 B, 70점대는 C, 나머지는 F로 학점란에 값을 채운다.
                단, 점수는 반드시 0~100의 값만 입력받는다.
           
            확인버튼 클릭 시 체크 사항
             1. 학점에 대한 채점이 되었는지 확인. 안되어 있을 경우 "학점에 대한 채점을 먼저 하세요."라고 띄워주고 끝.
             2. 채점이 되어있으면 "서버로 보내시겠습니까?" 띄워주고 확인 버튼 선택 시 서버로 요청.
                단, 서버프로그램은 1211_2.html, 전송방식은 get으로 함.
        */

        function grading(){
            var score = document.form1.score.value;
            if(score==""){
                alert("점수를 입력하세요.");
                document.form1.score.focus();
                return;
            }
            if(isNaN(score)){
                alert("점수는 숫자로만 입력하세요.");
                document.form1.score.value = "";
                document.form1.score.focus();
                return;
            }
            else{
                score = parseInt(score);
                if(score>=90){ document.form1.grade.value = "A"; }
                else if(score>=80){ document.form1.grade.value = "B"; }
                else if(score>=70){ document.form1.grade.value = "C"; }
                else{ document.form1.grade.value = "D"; }
            }
        }

        function check(){
            if(document.form1.grade.value == ""){
                alert("학점에 대한 채점을 먼저 하세요.")
                return;
            }
            if(confirm("서버로 보내시겠습니까?")){
                document.form1.submit();
            }
        }
    </script>

</head>
<body>
    <h1>학점 매기기 게임</h1>
    점수를 입력하세요.

    <form action="1211_2.html" name="form1" method="get">

        점수 : <input type="text" id="score" name="score" size="5"  />
        <br />
        학점 : <input type="text" id="grade"  name="grade" size="5" />
        &nbsp;
        <input type="button" name="result" onClick="grading()" value="채점" />
        <input type="button" name="result2" onClick="check()" value="확인" />
   
    </form>
</html>

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트-학점매기기 게임</title>
    <script>
        /*
        문제)채점 버튼 클릭 시 체크 사항
             1. 점수를 입력했는지 체크, 안되어 있을 경우 "점수를 입력하세요." 띄워주고 커서를 점수란으로 보내기
             2. 점수가 입력이 되었으면 숫자인지 체크. 아닌경우 "점수는 숫자로만 입력하세요." 띄워주고
                기존값은 초기화 한 후 커서를 점수란으로 보내기
             3. 점수를 숫자로 타입을  변경하고 90점이상은 A, 80점대는 B, 70점대는 C, 나머지는 F로 학점란에 값을 채운다.
                단, 점수는 반드시 0~100의 값만 입력받는다.
           
            확인버튼 클릭 시 체크 사항
             1. 학점에 대한 채점이 되었는지 확인. 안되어 있을 경우 "학점에 대한 채점을 먼저 하세요."라고 띄워주고 끝.
             2. 채점이 되어있으면 "서버로 보내시겠습니까?" 띄워주고 확인 버튼 선택 시 서버로 요청.
                단, 서버프로그램은 1211_2.html, 전송방식은 get으로 함.
        */

        function grading(){
            var score = document.form1.score.value;
            //var score = document.getElementById("score").value; //윗줄과 같음
            if(score==""){
                alert("점수를 입력하세요.");
                document.form1.score.focus();
                return;
            }
            if(isNaN(score)){
                alert("점수는 숫자로만 입력하세요.");
                document.form1.score.value = "";
                document.form1.score.focus();
                return;
            }
            else{
                score = parseInt(score);
                if(score>=90){ grade = "A"; }       //document.form1.grade.value = "A";
                else if(score>=80){ grade = "B"; }  //document.form1.grade.value = "B";
                else if(score>=70){ grade = "C"; }  //document.form1.grade.value = "C";
                else{ grade = "F"; }                //document.form1.grade.value = "F";
            }
            document.form1.grade.value = grade;
        }
       
        var grade;

        function check(){

            if(document.form1.score.value == ""){
                alert("점수를 먼저 입력하세요.");
                return;
            }
            if( grade == ""){      //document.form1.grade.value()==""
                alert("학점에 대한 채점을 먼저 하세요.")
                return;
            }
            if(confirm("서버로 보내시겠습니까?")){
                document.form1.submit();
            }
        }
    </script>

</head>
<body>
    <h1>학점 매기기 게임</h1>
    점수를 입력하세요.

    <form action="1211_2.html" name="form1" method="get">

        점수 : <input type="text" id="score" name="score" size="5"  />
        <br />
        학점 : <input type="text" id="grade"  name="grade" size="5" />
        &nbsp;
        <!--
        <input type="button" name="result" onClick="grading()" value="채점" />
        <input type="button" name="result2" onClick="check()" value="확인" />
        아래에 버튼 클릭시 하나의 함수에서 처리하는 방법
         -->
         <input type="button" name="result" onClick="grading()" value="채점" />
        <input type="button" name="result2" onClick="check()" value="확인" />
       
        <!-- 두개의 함수를 하나의 함수로 처리해보기 -->
    </form>
</html>

 

 

* 두개의 함수를 하나의 함수로 처리 *

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트-학점매기기 게임</title>
    <script>
        /*
        문제)채점 버튼 클릭 시 체크 사항
             1. 점수를 입력했는지 체크, 안되어 있을 경우 "점수를 입력하세요." 띄워주고 커서를 점수란으로 보내기
             2. 점수가 입력이 되었으면 숫자인지 체크. 아닌경우 "점수는 숫자로만 입력하세요." 띄워주고
                기존값은 초기화 한 후 커서를 점수란으로 보내기
             3. 점수를 숫자로 타입을  변경하고 90점이상은 A, 80점대는 B, 70점대는 C, 나머지는 F로 학점란에 값을 채운다.
                단, 점수는 반드시 0~100의 값만 입력받는다.
           
            확인버튼 클릭 시 체크 사항
             1. 학점에 대한 채점이 되었는지 확인. 안되어 있을 경우 "학점에 대한 채점을 먼저 하세요."라고 띄워주고 끝.
             2. 채점이 되어있으면 "서버로 보내시겠습니까?" 띄워주고 확인 버튼 선택 시 서버로 요청.
                단, 서버프로그램은 1211_2.html, 전송방식은 get으로 함.
        */

        function grading(chk){
            var score = document.form1.score.value;
            //var score = document.getElementById("score").value; //윗줄과 같음
            if(chk == "1"){
               if(score==""){
                alert("점수를 입력하세요.");
                document.form1.score.focus();
                return;
                }
                if(isNaN(score)){
                    alert("점수는 숫자로만 입력하세요.");
                    document.form1.score.value = "";
                    document.form1.score.focus();
                    return;
                }
                else{
                    score = parseInt(score);
                    if(score>=90){ grade = "A"; }       //document.form1.grade.value = "A";
                    else if(score>=80){ grade = "B"; }  //document.form1.grade.value = "B";
                    else if(score>=70){ grade = "C"; }  //document.form1.grade.value = "C";
                    else{ grade = "F"; }                //document.form1.grade.value = "F";
                }
                document.form1.grade.value = grade;
            }
            else{
                if(document.form1.score.value == ""){
                    alert("점수를 먼저 입력하세요.");
                    return;
                }
                if( grade == ""){      //document.form1.grade.value()==""
                    alert("학점에 대한 채점을 먼저 하세요.")
                    return;
                }
                if(confirm("서버로 보내시겠습니까?")){
                    document.form1.submit();
                }
            }
        }
               
    </script>

</head>
<body>
    <h1>학점 매기기 게임</h1>
    점수를 입력하세요.

    <form action="1211_2.html" name="form1" method="get">

        점수 : <input type="text" id="score" name="score" size="5"  />
        <br />
        학점 : <input type="text" id="grade"  name="grade" size="5" />
        &nbsp;
       
        <!-- 두개의 함수 사용
        <input type="button" name="result" onClick="grading()" value="채점" />
        <input type="button" name="result2" onClick="check()" value="확인" />
         -->
         
        <!-- 두개의 함수를 하나의 함수로 처리해보기 -->
        <input type="button" name="result" onClick="grading('1')" value="채점" />
        <input type="button" name="result2" onClick="grading('2')" value="확인" />

    </form>
</html>

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

** JavaScript (자바스크립트) 란? **

HTML로는 웹의 내용을 작성하고, CSS로는 웹을 디자인하며, 자바스크립트로는 웹의 동작을 구현함.

특별한 준비나 컴파일 없이 보통의 문자형태로 작성할 수 있고, 실행도 할 수 있음

 

* 자바스크립트의 특징

- 자바스크립트는 객체 기반의 스크립트 언어

- 자바스크립트는 동적이며, 타입(데이터)을 명시할 필요가 없는 인터프리터 언어

- 자바스크립트는 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현 할 수 있음

 

* 자바스크립트를 사용하여 웹 프로그래밍에서 할 수 있는 일

- HTML 의 내용을 변경 할 수 있음

- HTML 속성을 변경 할 수 있음

- HTML 스타일을 변경 할 수 있음

 

* 자바스크립트 문법

- 실행문은 세미콜론 (;)으로 구분 (한 행에 한 문장씩 작성할 경우 세미콜론 생략 가능)

- 자바스크립트는 대소문자를 구분함

- 변수나 함수의 이름, 예약어 등을 작성하거나 사용할 때에는 대소문자를 정확히 구분해서 사용

 

사용예)

var javascript = 10;

var javaScript = 20;     // javascript와 javaScript는 서로 다른 변수로 인식

var Script = 30;           // 변수선언은 var키워드로 사용 할 수 있으므로 var는 동작안함

 

 

* 자바언어와 자바스크립트 특징 비교 *

특징 자바 언어 자바스크립트
언어 종류 소스파일을 컴파일하여 실행하는 언어 브라우저가 소스 코드를 직접 해석하여 실행하는 인터프리터 언어
실행 방식 자바 가상 머신 위에서 실행 브라우저 위에서 실행
작성 위치 별도의 소스 파일에 작성 HTML 파일 안에 삽입 가능
변수 선언 변수의 타입을 반드시 선언 해야함 변수의 타입을 선언하지 않아도 사용 가능

 

 

 

* 식별자(identyfier)

식별자는 변수나 함수의 이름을 작성할 때 사용하는 이름을 의미함

자바스크립트에서 식별자는 영문자(대소문자), 숫자, 언더바(_), $만 사용할 수 있음.

(숫자와 식별자를 구별하기 위해 숫자로 시작할 수 없음)

 

* 식별자 작성 방식 *

- Camel  Case 방식

식별자가 여러 단어로 이루어질 경우 첫번 째 단어는 모두 소문자로 , 그 다음 단어부터는 첫 문자만 대문자로 작성하는 방식

- Underscore Case 방식 (자바스크립트에서 많이 사용)

단어들을 소문자로만 작성하고, 단어들은 언더바(_)로 연결하는 방식

 

사용예)

var firstVar = 10;                        //Camel Case 방식

Function my_first_func              //Underscore Case 방식

{

       var firstLocalVar = 20;        //Camel Case 방식

}

 

cf) 자바스크립트에서 하이픈(-)은 뺄셈을 위해 예약된 키우드로 식별자를 작성 할때는 사용할 수 없음

 

* 키워드 - 미리 예약된 단어 즉 예약어라고 하여, 프로그램 내에서 식별자로 사용할 수 없음

* 주석 -웹 브라우저의 동작에 전형 영향을 미치지 않음  /  문법 - 1.한줄주석 : //주석문 |  2. 여러줄주석 : /* 주석문 */

 

* 자바스크립트 출력

- window.alert() 메서드

- HTML DOM요소를 이용한 innerHTML 프로퍼티

- document.write() 메서드

- console.log() 메서드 (보통 디버깅용)

- window.alert() 메서드 (가장 많이 사용) - 브라우저와는 별도의 대화 상자를 띄워 사용자에게 데이터를 전달함

 

ex)

<script>

function alertDialogBox() { alert("확인을 누를때까지 다른 작업을 할 수 없어요!");

</script>

 

cf) window 객체의 모든 메서드나 프로퍼티를 사용할 때는 window 라는 접수사를 생략할 수 있음

 

- document.write()메소드

document.write()메소드는 웹 페이지가 로딩될 때 실행되면, 웹 페이지에 가장 먼저 데이터를 출력함.

document.write()메소드는  대부분 테스트나 디버깅을 위해 사용됨

 

예)

<button onclick="document.write(4*5)">

-> //document.write 버튼을 누르면 20값이나오고 그 전의 body 는 날아감. (JAVASCRIPT 1208_2)

 

// 자바스크립트 html 는 head 실행 후 body 실행

 

 

- HTML DOM요소를 이용한 innerHTML 프로퍼티

document 객체의 getElementById()나 getElementsByTagName()등의 메서드를 사용하여  HTML요소를 선택함.

innerHTML 프로퍼티를 이용하면 선택된 HTML요소의 내용(content)이나 속성 (attribute)값을 손쉽게 변경할 수 있음.

 


<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <br /><br />
    <h1>HTML DOM 요소를 이용한 innnerHTML 프로퍼티</h1>
    <p id="text">이 문장을 바꿀 것입니다.</p>
    <script>
        var str = document.getElementById("text");
        str.innerHTML = "이 문장으로 바뀌었습니다.";
        //var str = document.getElementById("text").innerHTML = "이 문장으로 바뀌었습니다.";
    </script>

    <br />
    <h1>document.write()메서드, onClick 관련</h1>
    <script>
        document.write(5*5);
    </script>
    <button onclick="alert(5*5)">버튼을 눌러보세요</button>
    <button onclick="document.write(5*5);">버튼을 눌러보세요.</button>

    <br />
    <h1>console.log()메서드</h1>
    <script>
        console.log("결과는 : " + (5*5));
    </script>
</body>
</html>

 

 

버튼을 눌러보세요 -> alert창 뜸

버튼을 눌러보세요. -> document창 뜨고 그 전 body는 날아감


 

 

* 자바 스크립트 적용

HTML문서에 자바스크립트 코드를 적용하는 방법

1. 내부 자바스크립트 코드로 적용

2. 외부 자바스크립트 파일로 적용

 

- 내부 자바스크립트 코드 : (헤드 바디 모두 올 수 있음)

자바스크릷트 코드는 <script>태그를 사용하여 HTML문서안에 삽입할 수 있음

문법 :

<script>

  document.getElementById("text").~~~

</script>

 

- 외부 자바스크립트 파일 : (헤드에 와야함)

자바스크립트 코드는 HTML문서의 내부뿐만 아니라 외부 파일로 생성하여 삽입 할 수 있음

외부에 작성된 자바스크립트 파일은 .js확장자를 사용하여 저장함.

자바스크립트 파일(.js)을 적용하고 싶은 모든 웹 페이지에 <script>태그를 사용해 외부 자바스크립트 파일을 포함

 

** 예제1) 1208_4 <head>태그에 코드삽입 **

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>자바스크립트</title>
    <script>
        // function printDate(){
        //     document.getElementById("date").innerHTML = Date();
        // }
    </script>
</head>
<body>
    <!--head태그에 자바 스크립트 적용-->
    <h1>head 태그 내 자바스크립트 적용시</h1>
    <p>자바스크립트 함수를 적용하면 현재 날짜와 시간 정보 조회</p>
    <button onclick="printDate();">현재 날짜와 시간</button>
    <p id="date";></p>

    <script>
        function printDate(){
            document.getElementById("date").innerHTML = Date();
        }
    </script>
</body>
</html>

 


 

 

 

** 기본 타입 **

타입(data type)이란 프로그램에서 다룰 수 있는 값의 종류를 의미함 

기본타입은 원시 타입과 객체 타입으로 구분함

 

- 원시타입 : 숫자(number), 문자열(string), 불리안(boolean), 심볼(symbol), undefined  /  심복타입은 익스플로러에서 지원하지 않음.

- 객체타입 : 객체(object)

 

예제) 자바스크립트의 데이터 타입은 마지막에 넣은 변수의 타입을 따라 결정된다.

var num = 10;                     

var myName = "홍길동";

var str;

 

- 숫자(number)

정수와 실수를 따로 구분하지 않고, 모든 수를 실수 하나로만 표현함.

 

- 문자열(string)

문자열은 큰따옴표(" ")나 작은 따옴표(' ')로 둘러싸인 문자의 집합을 의미

예)

var firstStr = "이것도 문자열입니다.";

var secondStr = '이것도 문자열입니다';

var thirdStr = "나의 이름은 '홍길동'이야";          //따옴표속에 같은 종류의 따옴표 올 수 없다 (다른종류의 따옴표 사용해야함)

var fourthStr = '나의 이름은 "홍길동"이야';

 

- 불리언(boolean)

참(true)와 거짓(false)을 표현함.

var fisrtNum = 10;

var secondNum = 11;

document.getElementById("result").innerHTML = (fNum == sNum);         //false

 

- typeof 연산자

피연산자의 타입을 반환하는 피연산자가 단 하나 뿐인 연산자이다.

typeof 10;                /number  타입

typeof "문자열";       //sting  타입

typeof true;              //boolean  타입

typeof undefined;    //undefined  타입

typeof null;              //object  타입

 

cf) 변수선언을 했지만 초기값세팅이 되지 않은 경우 -> undefined

 

- null과 undefined

null은 object타입이며, 아직 값이 정해지지 않은 것을 의미함

undifined란 null과는 달리 타입이 정해지지 않은 것을 의미함

undifined는 초기화되지 않은 변수나 존재하지 않은 값에 접근할때 반환됨

예)

var num;                     //초기화하지 않았으므로 undefined값을 반환함

var str;                        //object 타입의 null값

typeof secondNum;    //정의되지 않은 변수에 접근하면 undefined 값을 반환함.

 

- 객체 (object)

기본타입은 객체이며, 객체란 실생활에서 우리가 인식할 수 있는 사물을 의미

객체는여러 프로퍼티나 메서드를 같은 이름을 묶어놓은 일종의 집합체

예)

var dog = {name:"해피", age:3};           //객체생성

document.getElementById("result").innerHTML = "강아지의 이름은" + dog.name + "이고, 나이는" + dog.age + "살 입니다.";

 

- 타입변환(type conversion)

자바스크립트는 타입검사가 매우 유연한 언어로 변수의 차입이 정해져 있지 않으며, 같은 변수에 다른 타입의 값을 다시 대입할 수도 있음.

예)

var num = 20;    //Number 타입의 20

num = "이십"     //String타입의 "이십"

var num;            //한 변수에 여러번 대입할 수 는 있지만, 변수의 재선언은 할 수 없습니다. + 재선언문은 무시됩니다.

 

- 묵시적 타입 변환(implicit type conversion)

자바스크립트는 특정 타입의 값을 기대하는 곳에 다른 타입의 값이 오면, 자동으로 타입을 변환하여 사용. 즉, 문자열 값이 와야 할 곳에 숫자가 오더라도 알아서 숫자를 문자열로 변환. 

예)

10 + "문자열";      // 문자열 연결을 위해 숫자 10이 문자열로 변환됨.

"3" * "5";               // 곱셈 연산을 위해 두 문자열이 모두 숫자로 변환됨.

1 - "문자열";         // NaN : Not a Number으로 정의되지 않는 값이나 표현 할 수 없는 값

// NaN은 number타입의 값으로0으로 나누거나, 숫자로 변환 할 수 없는 피연산자로 산술 연산을 시도하는 경우에 반환 되는 읽기 전용

 

- 명시적 타입 변환(explicit type conversion)

자바스크립트는 묵시적 타입 변환을 많이 사용하지만, 명시적으로 타입변환 방법 제공

명시적 타입 변환을위해 자바 스크립트가 제공하는 전역함수

.Number()       .String()        .Boolean()        .Object()        .parseInt()        .parseFloat()

예)

Number("10");     // 숫자 10

String(true);         // 문자열 "true"

Boolean(0);         // 불리언 false

Object(3);            //new Number(3)와 동일한 결과로 숫자3

 

- 불리언 값을 문자열로 변환

String()함수와 toString 메서드를 사용할 수 있음.

예제)

String(true);         //문자열"true"

false.toString();    //문자열"false"

 

- 날짜를 문자열이나 숫자로 변환 

String()함수와 toString()메서드를 사용, 날짜 (Date) 객체는 문자열과 숫자로 모두 변환 할 수 있는 유일한 타입

메소드 설  명
getDate ()  날짜 중 일자를 숫자로 반환함.(1~31)
getDay ()  날짜 중 요일을 숫자로 반환함. ( 0(일요일)~6(토요일) )
getFullYear ()  날짜 중 연도를 4자리 숫자로 반환함. (yyyy년)
getMonth ()  날짜 중 월을 숫자로 반환함. ( 1월(0) ~ 12월(11) )
getTime ()  1970년 1월 1일부터 현재까지의 시간을 밀리초(millisecond) 단위의 숫자로 반환함.
getHours ()  시간 중 시를 숫자로 반환함. (0~23)
getMinutes ()  시간 중 분을 숫자로 반환함. (0~59)
getSeconds ()  시간 중 초를 숫자로 반환함. (0~59)
getMilliseconds ()  시간 중 초를 밀리초 (millisecond) 단위릐 숫자로 반환함. (0~999)

 

 

- 문자열을 숫자로 변환

Number()함수를 사용함, 문자열을 숫자로 변환해 주는 두개의 전역 함수를 별도로 제공

함 수 설 명
parseInt() 문자여을 파싱하여 특정 진법의 정수를 반환함.
parseFloat() 문자열을 파싱하여 부동 소수점 수를 반환함.

 

 

 

 

** 변수 **

 

- 변수의 선언과 초기화

데이터(data)를 저장할 수 있는 메모리 공간을 의미하여, 그 값이 변경될 수 있음.

var키워드를 사용하여 변수를 선언함.

선언되지 않은 변수를 사용하려고 하거나 접근하려고 하면 오류가 발생.

단, 선언되지 않은 변수를 초기화할 경우에는 자동으로 선언을 먼저 한 후 초기화를 진행.

선언된 변수는 나중에 초기화 할 수도 있고, 선언과 동시에 초기화 할 수 도 있습니다.

쉼표(,) 연산자를 이용하여 여러 변수를 동시에 선언하거나 초기화 할 수 있음.

예제)

var month                               // month라는 이름의 변수 선언

date = 25;                               //date라는 이름의 변수를 묵시적으로 선언

var month, date;                     //여러 변수를 한번에 선언

var hours =7, minutes = 15;   //여러변수를 선언과 동시에 초기화

month = 10, date = 5;

 

 

- 변수의 타입과 초기값

변수는 타입이 정해져 있지 않으며, 같은 변수에 다른 타입의 값을 다시 대입할 수 도 있음.

한 변수에 다른 타입의 값을 여러 번 대입할 수는 있지만, 한 번 선언된 변수를 재선언 할 수는 없음. 

 

- 변수의 이름

변수의 이름은 식별자이며, 변수의이름

영문자(대소문자), 숫자, 언더바(_), $만 사용할 수 있음.

숫자와의 구분을 빠르게 하기 위해 숫자로는 시작할 수 없음.

대소문자를 구분하며, 자바스크립트 언어에서 예약된 키워드는 이름으로 사용할 수 없음.

 

 

** 연산자 **

산술연산자  +, -, *, /, %   연산자 우선순위 1순위는 소괄호
대입연산자  =, +=, -=, *=, /=, %=
증감연산자  ++, --  (전치, 후치)
비교연산자  >, >=, <, <=
== (값이 같으면 참을 반환), ===(값이 같고 타입이 같으면 참을 반환),
!= (값이 같지 않으면 참),  !== (값이 같지 않거나, 타입이 다르면 참)
논리연산자 &&, ||, !
기타연산자 문자결합, 삼항, 쉼표, delete, typeof, instanceof, void연산자

-  문자결합
    1) 피연산자가 둘 다 숫자이면, 산술 연산인 덧셈을 수행
    2) 피연산자가 하나라도 문자열이면, 문자열 결합을 수행

- 삼항 : 표현식 ? 반환값1 : 반환값2

- 쉼표 : 여러 변수를 동시에 갱신할 경우

- delete : 객체의 프로퍼티 또는 배열의 요소등을 삭제함(삭제 성공시 true, 실패시 false)
               배열의 요소 삭제시 - 배열의 요소만 삭제하고, 배열의 크기 유지(크기 줄이지 않는다.)

 

typeof - 피연산자의 타입을 반환함

instanceof - 피연산자의 객체가 특정 객체의 인스턴스인지 아닌지를 확인함.

void - 어떤 타입의 값이 오던지 상관없이 언제나 undefined 값만을 반환.

 


 

** 예제) 1108_5 숫자 타입 **

 
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>타입</title>
</head>
<body>
    <h1>숫자 타입</h1>
    <p id="number"></p>

    <h1>문자열 타입</h1>
    <p id="str"></p>

    <h1>boolean 타입</h1>
    <p id="result"></p>

    <script> //숫자 타입
        var firstNum = 10;
        var secondNum = 10.00;
        var thirdNum = 10e6;
        var fourthNum = 10e-6;

        document.getElementById("number").innerHTML = firstNum + "<br />" +
                            secondNum + "<br />" + thirdNum + "<br />" + fourthNum + "<br />";
    </script>

    <script> //문자열 타입
        var firstStr = "이것도 문자열입니다.";
        var secondStr = '이것도 문자열입니다';
        var thirdStr = "나의 이름은 '홍길동'이야";
        var fourthStr = '나의 이름은 "홍길동"이야';

        document.getElementById("str").innerHTML = firstStr + "<br />" +
                            secondStr + "<br />" + thirdStr + "<br />" + fourthStr + "<br />";
    </script>

    <script> //불리안 타입
        var fNum = 10;
        var sNum = 11;

        document.getElementById("result").innerHTML = (fNum == sNum);
    </script><br /><br />

    <!--typeof 연산자-->
    <script>
        var num;            //초기값 없음
        var obj = null;     //객체 변수값이 없음

        document.write(typeof 100 + "<br />");
        document.write(typeof 10.5 + "<br />");
        document.write(typeof "홍길동" + "<br />");
        document.write(typeof true + "<br />");
        document.write(typeof num + "<br />");
        document.write(typeof obj + "<br />");
        document.write(typeof [1,2,3] + "<br />");
    </script>

    <!--null과 undefined-->
    <br />
    <h1>null과 undefined</h1>
    <p id="result2"></p>

    <script>
        var num;            //초기화 하지 않았으므로 undefined값을 반환함.
        var str = null;     //object타입의 null값

        //정의되지 않은 변수에 접근하면 undefined 값을 반환함
        document.getElementById("result2").innerHTML = (typeof num) + "<br />" +
                    (typeof str) + "<br />" + (typeof secondNum2)  + "<br />";
    </script><br />

    <h1>객체 타입</h1>
    <p id="result3"></p>
    <script>
        var dog = {name:"해피", age:3};       //객체 생성

        //객체 프로퍼티 참고
        document.getElementById("result3").innerHTML = "강아지 이름은 " + dog.name  + "이고, 나이는" + dog.age + "살 입니다.";
    </script>

</body>
</html>


 

** 예제) 1108_6 **

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h1>같은 변수에 다른 타입의 값 대입</h1>
    <P id="result"></P>
    <script>
        var num = 20;       //변수 선언과 함께 초기화
        document.getElementById("result").innerHTML = num + "<br />";
        num = "이십";       //문자열 대입
        document.getElementById("result").innerHTML += num + "<br />";   //누적 (=만 사용하면 값이 "이십"으로 덮힌다.)
        var num;            //한 변수를 여러번 초기화 할 수 있으나 재선언은 할 수 없음.
        document.getElementById("result").innerHTML += num + "<br />";
    </script>

    <h1>묵시적 타입 변환</h1>
    <p id="result2"></p>
    <script>
        //문자열 연결을 위해 숫자 10이 문자열로 변환
        var result = 10 + "문자열";
        document.getElementById("result2").innerHTML = result + "<br />";
        result = "3"*"5";           //두 문자열 모두 숫자로 변환
        document.getElementById("result2").innerHTML += result + "<br />";
        result = 1 - "문자열";
        document.getElementById("result2").innerHTML += result + "<br />";
    </script><br /><br />

    <h1>명시적 타입 변환</h1>
    <p id="result3"></p>
    <script>
        document.getElementById("result3").innerHTML = Number("10") + "<br />";
        document.getElementById("result3").innerHTML += String(true) + "<br />";
        document.getElementById("result3").innerHTML += Boolean(0) + "<br />";
        document.getElementById("result3").innerHTML += Object(3) + "<br />";

        document.getElementById("result3").innerHTML += String(false) + "<br />";
        document.getElementById("result3").innerHTML += false.toString() + "<br />"; //윗줄과 동일한 내용
    </script>

    <h1>변수명 재선언시 데이터 값 변화</h1>
    <script>
        stdNmae = "홍길동";
        comGrade = 96;

        var stdNmae;
        var comGrade;
        document.write("학생 이름 : " + stdNmae + "<br />");
        document.write("컴퓨터 점수 : " + comGrade + "<br />");
    </script>

    <script>
        //전역, 지역변수
        var globValue1;     //전역변수 선언
        //globValue2;         //전역변수 선언, var생략

        function test(){
            var locValue;   //지역변수 선언
            globValue;      //함수 내부에서 var생략시 자동 전역변수로 선언
            locValue = 10;  //지역변수 사용
        }

        globValue = 10;     //지역변수가 전역변수로 바뀌어서 사용

        //전역변수 지역변수 예제
        function getGrade(){
            var kor = 95;       //지역변수
        }

        var kor = 100;          //전역변수
        getGrade();
        document.write("국어점수 : " + kor + "<br />");

        //지역변수로 리턴 예제
        function getGrade2(){
            var kor2 = 95;      //지역변수
            return kor2;
        }

        kor2 = getGrade2();      //함수호출 (kor2 전역변수)
        document.write("국어점수(리턴) : " + kor2 + "<br />");
    </script>
</body>
</html>


** 예제) 1108_7 **

 

 

링크를 동작하지 않습니다. -> 선택시 아무 효과 X

링크를 동작하지 않지만 HTML문서 배경은 변경됩니다. -> 선택시 배경 변경

 

 

 

 

 

 

 

 

 

 

소스 ↓

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!--연산자-->
    <h1>연산자</h1>

    <script>
        var x = 3, y = 5;
        var a = "abc", b = "bcd";

        document.write((x>y) + "<br />");       //false
        document.write((a <= b) + "<br />");    //true(알파벳 a보다 b가 큼)
        document.write((x < a) + "<br />" + "<br />");      //false(숫자와 문자열 비교불가)

        x = 3, y = '3', z= 3;
        document.write((x == y) + "<br />");    //true(값이 같음)
        document.write((x === y) + "<br />");   //false(값이 같으나 타입이 다름)
        document.write((x === z) + "<br />");   //true(값과 타입이 같음)
    </script>
    <br /><br />
    <h1>delete 연산자</h1>
    <script>
        var arr = [1,2,3];
        document.write("삭제 전 : " + arr + "<br />");
        delete arr[2];
        document.write("삭제 후 : " + arr + "<br />");
        document.write("arr[2] : " + arr[2] + "<br />")
        document.write("arr.length : " + arr.length + "<br />")
    </script>
    <br />
    <h2><a href="javascript:void(0)">링크는 동작하지 않습니다.</a></h2>
    <h2><a href="javascript:void(document.body.style.backgroundColor='yellow')">링크는 동작하지 않지만 HTML문서 배경은 변경됩니다.</a></h2>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

+ Recent posts