ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Javascript] 2. 변수 및 개체
    JS 2021. 4. 22. 21:56
    728x90

    ✔︎ 동적 변수 타입

    첫번째 포스트에서 자바스크립트는 동적 타입 언어의 특징을 가진다고 하였습니다.

    즉, 변수의 타입을 동적으로 지정할 수 있는 언어입니다.

     

    ✔︎ 변수 선언자

    var 선언자의 특징은 재선언, 재할당 모두 가능하단 겁니다.

    반대로 ES6에서 추가된 let, const 선언자는 재선언이 불가능하며, const의 경우에는 재할당도 불가능한 상수 값을 저장합니다.

    스코프 및 전역개체 프로퍼티는 나중에 다루도록 하겠습니다. 우선 참고바랍니다.

      var let const
    재선언 ⭕️
    재할당 ⭕️ ⭕️
    스코프 함수 블록 블록
    전역체 프로퍼티 Window - -

     

    ✔︎ 호이스팅

    전역이나 새로운 유효범위에 접근 시, 해당 유효범위 내 선언된 변수 및 함수식들이 유효범위 중간에 선언되었다 하더라도

    첫머리에 선언된 것 처럼 사용가능 한 것을 말합니다.

    개념이 좀 어려우실 수도 있는데 뒤에서 나올 실행 컨텍스트를 이해하시면 자연스럽게 이해되실겁니다 

     

    [ 대상 ]

    모든 변수 및 함수 선언문 🙆‍♂️

    할당문 🙅‍♂️

     

    [ var로 선언한 경우 ]

    var로 선언시 변수 라이프 사이클인 " 선언 => 초기화 => 할당 " 중 " 선언 => 초기화 "를 동시에 진행합니다.

    이때 초기화 단계에선 undefined로 초기화됩니다.

    따라서 위와 같은 특징으로 호이스팅을 통해 유효범위 상단에서 호출하더라도 에러가 발생하지 않습니다.

     

    [ let/const로 선언한 경우 ]

    let은 선언과 초기화가 분리되어 진행됩니다. 따라서 호이스팅을 통해 상단에서 호출하면 초기화가 되지 않은 변수를 참조한 것으로

    TDZ (temperal dead zone)에 빠지게 됩니다. (에러발생 - Reference Error)

    const의 경우는 let과 동일한 결과를 나타냅니다. 하지만 var의 라이프사이클과 유사하게 처리된다고 하던데 관련내용을 공부를 좀 더,,,

     

    ✔︎ 변수 선언 생략

    만일 변수를 선언하지 않고 첨조하려 한다면 당연히 위에서 본 것처럼 Reference Error가 발생할 것 입니다.

    하지만 선언하지 않은 변수에 값을 대입한다면 오류가 발생하지 않습니다.

    이러한 경우 자바스크립트 엔진에서 그 변수를 자동으로 전역변수로 선언하기 때문입니다.

     

    ✔︎ 데이터 타입

    원시형 (Premitive) : number, string, boolean, undefined, null, symbol

    참조형 (Object) : 배열, 함수 등

     

    ✔︎

    자바스크립스에서 원시 타입을 제외한 모든 값이 체입니다.

    체 리터럴 및 생성자를 통해 생성할 수 있습니다.

    또한 자바스크립트의 개체는 실행 중 프로퍼티를 자유롭게 변경할 수 있습니다.

    마지막으로 체는 Reference 타입으로 저장됩니다.

     

    [ 체 리터럴로 생성 ]

    var person = { gender : " 🙍‍♂️ ", age : " 27 "  };

    person.gender // 결과 : 🙍‍♂️

    person["gender"]  // 결과 : 🙍‍♂️

    person.job  // 결과 : undefined   =>  선언되지 않은 변수를 읽으려고 한다면 Reference Error 발생 

     

    person.job = "programmer";

    console.log(person); // 결과 : Object { gender : " 🙍‍♂️ ", age : " 27 ", job : "programmer" };

     

    delete person.job;

    console.log(person); // 결과 : Object { gender : " 🙍‍♂️ ", age : " 27 " };

     

    [ 생성자로 생성 ]

    자바스크립트는 클래스가 아닌 생성자라는 함수와 new 연산자를 통해 개체를 생성합니다.

    생성자는 체를 생성하고 초기화 하는 역할을 수행

     

    function Person( gender, age ) {

        this.gender = gender;

        this.age = age;

    }

     

    let person = new Person(" 🙍‍♂️  ", " 27 "); => 생성자

    console.log(person)  // 결과 : Object { gender : " 🙍‍♂️ ", age : " 27 " };

     

     

    ✔︎ 자바스크립트 체의 분류 

     

    [ 네이티브 체 ]

    ECMAScript 사양에 정의된

    내장 생성자 (Object, String, Number, Boolean, Array, Function 등) + JSON, Math 등의

     

    [ 호스트 체 ]

    자바스크립트 실행 환경에서 정의된

    브라우저 체 (Window, Navigator, History 등) + Dom에 정의된 체 등

     

    [ 사용자 정의 체 ]

    'JS' 카테고리의 다른 글

    [Javascript] 5. 클라이언트 측 자바스크립트  (0) 2021.04.25
    [Javascript] 4. 내부구조 및 실행과정  (0) 2021.04.25
    [Javascript] 3. 함수  (0) 2021.04.22
    [Javascript] 1. 언어적 특징  (0) 2021.04.22
    [Javascript] 5. 프로토타입  (0) 2021.04.22
Designed by Tistory.