ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바스크립트 데이터 타입과 연산자(1)
    자바스크립트 2021. 4. 2. 17:49

    자바스크립트란?

    - 동적인 웹사이트 제작시 사용되는 프로그래밍 언어

     

    - 변수 : 데이터를 담는 공간

    - 변수 선언 : 데이터를 담을 공간을 생성하는 것

    - 변수 초기화 : 생성된 변수에 데이터를 전달하는 것

     

    - 느슨한 타입 체크 언어 : int, float, char 등의 예약어를 이용하지 않고 var, let, const 키워드로만 변수를 선언

     

    // 변수 선언
    var fruit;
    
    // 변수 초기화
    fruit = "apple";
    var fruit = 'apple';
    // 데이터 변경
    fruit = 'banana';

     


    3.1 자바스크립트 기본 타입

     

    자바스크립트의 데이터 타입

    3.1.1 숫자

    - 하나의 숫자형만 존재(C언어는 int, long, float, double 등)

    var num = 5 / 2;
    
    console.log(num);  // (출력값) 2.5
    console.log(typeof num);  // number
    console.log(Math.floor(num)); // (출력값) 2

     

    3.1.2 문자열

    - 작은 따옴표('') 또는 큰 따옴표("")로 생성한다.

    - C언어의 char 타입과 같이 문자 하나만을 별도로 나타내는 데이터 타입은 존재하지 않는다.

     

    // str 문자열 생성
    var str = 'test';
    console.log(str[0], str[1]);  // (출력값) te
    
    // 문자열의 첫 글자를 대문자로 변경?
    str[0] = 'T';
    console.log(str);  // (출력값) test

     

    3.1.3 불린값

    // Boolean : 참 또는 거짓 데이터가 들어가 있는 상태
    var t = true;
    var f = false;

     

    3.1.4 null과 undefined

    - 두 타입 모두 '값이 비어있음'을 나타낸다.

    - 값이 할당되지 않은 변수는 undefined 타입이며, undefined 타입의 변수는 변수 자체의 값 또한 undefined이다. 이처럼 자바스크립트에서 undefined는 타입이자, 값을 나타낸다.

    - null 타입 변수의 typeof 결과는 null이 아니라 object이다.

    // undefined : 변수를 초기화시키지 않은 상태
    var unde;
    
    // null : 사용자가 임의로 값을 입력하지 않은 상태
    var nullVar = null;
    
    console.log(typeof nullVar === null);  // (출력값) false
    console.log(nullVar === null);  // (출력값) true

    3.2 자바스크립트 참조 타입(객체 타입)

     

    - 객체 : 숫자, 문자열, 불린값, null, undefined 같은 기본 타입을 제외한 모든 값.

    - 배열, 함수, 정규표현식 등이 모두 자바스크립트 객체로 표현된다.

    - '이름(key) : 값(value)' 형태의 프로퍼티들을 저장하는 컨테이너로서, 컴퓨터 과학 분야에서 해쉬(hash)라는 자료구조와 상당히 유사하다. 참조타입인 객체는 여러 개의 프로퍼티들을 포함할 수 있으며, 이러한 객체의 프로퍼티는 기본 타입의 값을 포함하거나, 다른 객체를 가리킬 수도 있다. 객체의 프로퍼티는 함수로 포함할 수 있으며, 이러한 프로퍼티를 메서드라고 부른다.

     

    3.2.1 객체 생성

    3.2.1.1 Obeject() 생성자 함수 이용

    // Object()를 이용해서 foo 빈 객체 생성
    var foo = new Object();
    
    // foo 객체 프로퍼티 생성
    foo.name = 'foo';
    foo.age = 30;
    foo.gender = 'male';
    
    console.log(typeof foo);  // (출력값) object
    console.log(foo);  // (출력값) { name: 'foo', age: 30, gender: 'male' }

     

    3.2.1.2 객체 리터럴 방식 이용

    - 중괄호({ })를 이용해서 객체를 생성

    - { } 안에 아무것도 적지 않은 경우 빈 객체가 생성된다.

    // 객체 리터럴 방식으로 foo 객체 생성
    
    var foo = {
        name : 'foo',
        age : 30,
        gender : 'male'
    };

     

    3.2.1.3 생성자 함수 이용 ( 4장에서 자세히 )

     

     

    3.2.2 객체 프로퍼티 읽기/쓰기/갱신

    - 객체의 프로퍼티에 접근하려면 다음과 같이 두 가지 방법을 사용한다.

    • 대괄호([ ]) 표기법
    • 마침표(.) 표기법

    - 다만, 프로퍼티가 표현식이거나 예약어일 경우 대괄호 표기법만을 이용해서 접근해야 한다.

    // 객체 리터럴 방식을 통한 foo 객체 생성
    var foo = {
        name: 'foo',
        major: 'computer science'
    };
    
    // 객체 프로퍼티 읽기
    console.log(foo.name);  // (출력값) foo
    console.log(foo['name']);  // (출력값) foo
    console.log(foo.nickname);  // (출력값) undefined
    
    // 객체 프로퍼티 갱신
    foo.major = 'electronics engineering';
    console.log(foo.major); // (출력값) electronics engineering
    
    // 객체 프로퍼티 동적 생성
    foo.age = 30;
    console.log(foo.age); // (출력값) 30
    
    // 대괄호 표기법만을 사용해야 할 경우
    foo['full-name'] = 'foo bar';
    console.log(foo['full-name']);  // (출력값) foo bar
    console.log(foo.full-name);  // (출력값) NaN      <- foo.full - name의 수식으로 인식함.

     

    3.2.3. for in 문과 객체 프로퍼티 출력

    - for in 문을 사용하면, 객체에 포함된 모든 프로퍼티에 대해 루프를 수행할 수 있다.

    var foo = {
        name: 'foo',
        age: 30,
        major: 'computer science'
    };
    
    // for in 문을 이용한 객체 프로퍼티 출력
    var prop;
    for (prop in foo) {
    	console.log(prop, foo[prop]);
    }
    
    // 출력결과
    // name foo
    // age 30
    // major 'computer science'

     

    3.2.4 객체 프로퍼티 삭제

    - delete 연산자를 이용. 주의할 점은 delete 연산자는 객체의 프로퍼티를 삭제할 뿐, 객체 자체를 삭제하지는 못한다.

    var foo = {
        name: 'foo',
        nickname: 'babo'
    };
    
    delete foo.nickname;
    console.log(foo.nickname);  // (출력값) undefined
    
    delete foo;  // foo 객체 삭제 시도
    console.log(foo.name);  // (출력값) foo    <- 객체 삭제 안된것을 확인

    3.3 참조 타입의 특성

    - 객체는 자바스크립트에서 참조 타입이라고 부른다. 이것은 객체의 모든 연산이 실제 값이 아닌 참조값으로 처리되기 때문이다.

    var objA = {
        val: 40
    };
    
    var objB = objA;
    
    console.log(objA.val);  // (출력값) 40
    console.log(objB.val);  // (출력값) 40
    
    objB.val = 50;
    console.log(objA.val);  // (출력값) 50
    console.log(objB.val);  // (출력값) 50

    - 위 예제에서 objA 변수는 객체 자체를 저장하고 있는 것이 아니라 생성된 객체를 가리키는 참조값을 저장하고 있다.

    - 따라서 objB에도 이같은 객체의 참조값이 저장되고 하나의 프로퍼티를 변경하면 다른 하나도 변경된다.

     

    3.3.1 객체 비교

    - 두 객체를 비교할 때도 참조값을 비교한다.

    var objA = { value: 100 };
    var objB = { value: 100 };
    var objC = objB;
    
    console.log(objA == objB);  // (출력값) false
    console.log(objB == objC);  // (출력값) true

     

    3.3.2 참조에 의한 함수 호출 방식

    - 기본 타입 : 값에 의한 호출 방식

    - 객체 타입 : 참조에 의한 호출 방식

    var num = 100;
    var objA = { value: 100 };
    
    function changeArg(num, obj){
        num = 200;
        obj.value = 200;
    }
    
    changeArg(num, objA);
    
    console.log(num);  // (출력값) 100
    console.log(objA);  // (출력값) { value: 200 }

     


    3.4 프로토타입

    - 자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결되어 있다. (객체지향의 상속 개념)

    - 이러한 부모 객체를 프로토타입 객체(짧게는 프로토타입)라고 부른다.

    var foo = {
        name: 'foo',
        age: 30
    };
    
    console.log(foo.toString());  // (출력값) "[object Object]"

    foo 객체는 toString() 메서드가 없으나 에러가 발생하지 않는다. 이는 foo 객체의 프로토타입에 toString() 메서드가 이미 정의되어 있기 때문이다. foo 객체를 출력해보면 아래와 같다.

     

     

    name과 age 프로퍼티 이외에도 __proto__ 프로퍼티가 있다는 것을 확인할 수 있다.

    ECMAScript 명세서에는 자바스크립트의 모든 객체는 자신의 프로토타입을 가리키는 [[Prototype]]라는 숨겨진 프로퍼티를 가진다고 설명하고 있다.

    댓글

Designed by Tistory.