돌아가기

문자열에 프로퍼티를 추가할 수 있을까요?

중요도: 5

아래 코드를 읽어보세요.

let str = "Hello";

str.test = 5;

alert(str.test);

아래 코드를 실행하면, 의도한 대로 문자열(str)에 프로퍼티(test)를 추가할 수 있을까요? 만약 가능하다면 얼럿 창엔 무엇이 출력될까요?

아래 코드를 실행해 보세요.

let str = "Hello";

str.test = 5; // (*)

alert(str.test);

엄격 모드인지 아닌지에 따라 결과가 나뉩니다.

  1. undefined (비 엄격 모드)
  2. An error (엄격 모드)

(*)로 표시한 줄에서 무슨 일이 일어나는지 알아보면서, 왜 위와 같은 결과가 나타나는지 이해해 봅시다.

  1. str의 프로퍼티에 접근하려 하면 "래퍼 객체"가 만들어집니다.
  2. 엄격 모드에선 래퍼 객체를 수정하려 할 때 에러가 발생합니다.
  3. 비 엄격 모드에선 에러가 발생하지 않습니다. 래퍼 객체에 프로퍼티 test가 추가되죠. 그런데 래퍼 객체는 바로 삭제되기 때문에 마지막 줄이 실행될 땐 프로퍼티 test를 찾을 수 없습니다.

위 예시를 통해 원시값과 객체는 다르다는 것을 다시 한번 확인해 보았습니다.

원시값은 추가 데이터를 저장할 수 없습니다.