본문 바로가기
풀스택 개발 학습 과정/프론트엔드

[자바스크립트] 데이터 타입, 변수선언, Scope

by 육츠 2024. 2. 25.
Contents 접기

자바스크립트란

- <script> </script>사이에 코드를 입력해야 한다. 
- head 태그 사이나 bady 태그 사이 어느 곳에 있어도 괜찮다.
- 단, script 에서 dom에 접근하려면 dom이 완성된 이후에 접근해야 한다.

 

alert() : 경고창

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>자바스크립트 시작</title>

    <script>
        alert("경고창1");
        //DOM 을 모른다. (DOM 조작을 직접 못하기 때문에 이벤트 처리를 해야한다.)
    </script>
</head>
<body>
    <h2>자바스크립트 시작</h2>
    <p>
        &lt;script&gt; 와 &lt;/script&gt; 사이에 코드를 입력해야 한다. <br>
        head 태그 사이나 bady 태그 사이 어느 곳에 있어도 괜찮다. <br>
        단, script 에서 dom에 접근하려면 dom이 완성된 이후에 접근해야 한다.
    </p>

    <script>
        alert("경고창2");
        //DOM 을 알고 있다. (DOM 조작을 할 수 있다)
    </script>
</body>
</html>

 

데이터 타입

자료형

종류 내용
문자열 대한민국", '대한민국'
숫자형 정수, 실수, 모두포함된 숫자
 boolean true, false (0 제외한 모든 숫자가 true)
함수형
- 선언 함수일반 변수이지만 함수인 처럼 실행시킬 있다.
- 표현 함수
객체형
- Object 타입
- JSON : 주로 비동기 통신을 위한 데이터 타입
- array : 배열 (2차원 배열도 가능하지만 사용하지는 않는다.)
- html 객체 (닫힌 태그 경우 다른값으로 바꿀 있다)
- null 객체(오류) : 변수가 아무 객체도 가리키지 않고 있음을 나타낸다 (JS V1 부터 나온 오류)
- undefined 타입 : 변수에 값이 존재하지 않음을 나타낸다.
(
변수를 만들고 초기화하지 않으면 undefined 이다. - 오류 아님)

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>데이터 타입과 변수</title>
</head>
<body>
    <h2 id="header">자바스크립트 결과는 콘솔창으로</h2>
    <script>
        //자료형
        // 1) 문자열 : "대한민국", '대한민국',
        let str = "대한민국"; // 변수 선언
        console.log(str);
        console.log(typeof str);
        console.log(`철수는 ${str} 사람입니다.`);

        // 2) 숫자형 : 정수, 실수, 모두포함된 숫자
        let number = 12;
        console.log(number);
        console.log('나이는:' + number); // + : 문자열 결합으로 사용
        console.log(number/5); // 연산은 실수형으로

        // 3) boolean 형 :true, false (0을 제외한 모든 숫자가 true)
        let bool = true;
        console.log(typeof bool);
        console.log(10 > 20);

        if(1) console.log('1은 true와 같다.');

        // 4) 함수형

        // 선언적 함수
        function add(a,b) {
            return a+b;
        }

        let sum = add; // 일반 변수이지만 함수인 것 처럼 실행시킬 수 있다.
        console.log('sum의 결과 : ' + sum(21,11));

        // 표현 함수
        let minus = function(a,b) {
            return a - b;
        }

        console.log(typeof add);
        console.log(typeof minus);
        console.log(`더하기 결과 : ${add(10,20)}`); // back-tick 만 가능 하다.
        console.log(`빼기 결과 : ${minus(10,20)}`) ;

        // 결과를 브라우저에 출력 : 사용하지 마세요.
        document.write(typeof bool);


        // 5) 객체형 :객체의 종류가 여러가지 있음
        // 5-1) Object 타입
        let obj = {name : '홍길동', age : 25};
        console.log(typeof obj);
        console.log('이름은 ' + obj['name']); //사용방법 1)
        console.log('나이는 ' + obj.age); // 사용방법 2)
        console.log(obj);

        // 5-2) JSON : 주로 비동기 통신을 위한 데이터 타입
        let data = {"name":'홍길동', "age":25};
        // 클라이언트 - 서버 간의 데이터를 주고받게 되면 데이터는 직렬화가 되어있다
        
        console.log('----------------');

        // 5-3) array : 배열 
        let ary = [2,4,6,8];
        console.log(typeof ary);
        console.log(ary);
        console.log(ary[1]);
        
        // 2차원 배열도 가능하지만 잘 사용하지는 않는다.

        console.log('----------------');

        // 5-4) html 객체
        let html = document.getElementById('header');
        console.log(typeof html) // object
        console.log(html)
        
        // 값을 가져오기
        let a = html.innerHTML; 
        console.log(a)
        
        // 닫힌 태그 경우 다른값으로 바꿀 수 있다.
        html.innerHTML = "바꿨습니다.";

        // alert(html); : [object HTMLHeadingElement]

        // 5-5) null 객체 - 오류
        //      변수가 아무 객체도 가리키지 않고 있음을 나타낸다 - JS V1 부터 나온 오류
        let temp = null;
        console.log(typeof temp);

        // 6) undefined 타입 
        // 변수에 값이 존재하지 않음을 나타냄
        // 변수를 만들고 초기화하지 않으면 undefined 이다. - 오류 아님
        let noInit;
        console.log(noInit);
        console.log(typeof noInit);

        // 7) Symbol
        // 데이터의 유일성을 보장하기 위해 사용
        let b = Symbol();
        

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

 

Javascript Scope ( global, local )

- 지역공간에서는 글로벌 공간의 접근 가능하다. 그러나 반대는 불가능하다.
지역변수는 전역변수보다 우선순위가 높다.
- arrow function (화살표 함수) : scope 개념이 없다.
자바 자바스크립트
Strongly typed 언어  -> 문법이 엄격한 언어 Weakly typed 언어
-> 변수를 선언한 후 다른 타입을 대입해도 상관없음
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>변수의 선언과 Scope</title>
</head>
<body>
    <h2>변수의 선언과 Scope</h2>
    <p>출력결과는 콘솔창에서 확인</p>
    <p>자바스크립트 : Weakly typed 언어 -> 변수를 선언한 후 다른 타입을 대입해도 상관없음</p>
    <p>자바 : Strongly typed 언어 -> 문법이 엄격한 언어</p>

    <script>
        // var
        // let
        // const

        var a = "스물";
        var a =20; // 에러가 나지 않는다.

        let b = "서른";
        // let b = 30; // 오류
        b = 30;   // 재선언은 되지 않지만 값 변경은 가능하다

        const c = "마흔";
        // c = 40; //오류

        // alert("이것은 경고");

        function add(a,b) {
            let result = a+b;
            console.log("합계: " + result);
        }

        add(10,20);
        // console.log(result); // 오류

        let total = 0;
        for(let i=1; i<=10; ++i){  // i 는 지역변수
            total += i;
        }

        console.log("1~10까지의 합계:" + total);
        // console.log("마지막 i값 : " + i);

        console.log('--------------------------');

        let x = 20; // 전역 변수

        { // 새로운 지역 생성
            let x = 10; // 지역공간에 x 변수를 * 새롭게 * 생성하는 것이다. 
            console.log(x);
            
        }
        console.log(x);

        console.log('--------------------------');

        let y = 20; // 전역 변수

        { 
            y = 10; // 전역 공간의 y 변수를 사용하는 것이다.
            console.log(y);
            
        }
        console.log(y); // 63 라인에서 값이 바뀌기 때문에 10이 출력된다.


        console.log('---------------- const -----------------');
        const k = 20; // 단일데이터 : 값 변경 못함
        const l = {x:10, y:20};
        // l = {x:100, y:200}; // 에러 -> 다른 데이터를 가질 수 없다.
        l['x'] = 100;
        console.log(l); // l 이 가리키는 변수는 변경 가능하다.
    </script>
</body>
</html>

결과

 

자바스크립트 엔진  : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%97%94%EC%A7%84

 

자바스크립트 엔진 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 자바스크립트 엔진(JavaScript engine)은 자바스크립트 코드를 실행하는 프로그램 또는 인터프리터이다. 자바스크립트 엔진은 전통적인 인터프리터일 수도 있고,

ko.wikipedia.org