ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ES6] const ? 불변아니였어?
    Eureka! 2019. 10. 31. 16:53

    제목이 조금 그렇죠?

    ES6에 들어와서 const에 대해서 왜 const로 선언된 배열이나 객체는 내부 값이 변경 가능한가? 라고 생각했던 적이 있어서 글을 써봅니다.

    아래 코드를 보시죠 : )

    const qux = 3;
    qux;     // 3
    qux = 5;    // Uncaught TypeError: Assignment to constant variable.
    const baz = 'Hello!';
    baz;    // "Hello"
    baz = 'Hi!';    // Uncaught TypeError: Assignment to constant variable. (*역시 const인가 좋아!)
    
    const foo = { name : 'foo', age: 23 };
    console.log(foo);    // {name: "foo", age: 23}
    // 좋아요! 객체가 리터럴로 잘 선언되었어요!
    foo.name = 'bar';
    console.log(foo);    // {name: "bar", age: 23}    (* 음 잘 바뀌었군..? 음 잠시만 const 아니였어?)

    여기서 이렇게 동작하는 이유는 사실 단순했습니다. : )
    위에서 const로 선언된 baz는 리터럴로 선언된 문자열의 주소를 가리키는 거죠!
    마찬가지로 const로 선언된 foo는 리터럴 객체의 주소를 가리키지 실제 값들을 const로 정의한게 아닌 것이죠.
    따라서 foo 내부에 있는 속성들은 변경이 가능 한 것이겠네요!!

    foo에 객체를 참조하는 주소값은 불변이지만, 내부의 값들은 불변이 아니다! 정도로 정리하면 될 것 같습니다!

    'Eureka!' 카테고리의 다른 글

    Volta???  (0) 2023.10.05
    [Testing-library] render.. ? append?  (0) 2022.03.30
    Array 채우기와 랜덤 추출!  (0) 2019.10.28
    var vs. let vs. const ?  (0) 2019.10.01

    댓글

Designed by Tistory.