문자열에 프로퍼티를 추가할 수 있을까요?
중요도: 5
아래 코드를 읽어보세요.
let str = "Hello";
str.test = 5;
alert(str.test);
아래 코드를 실행하면, 의도한 대로 문자열(str)에 프로퍼티(test)를 추가할 수 있을까요? 만약 가능하다면 얼럿 창엔 무엇이 출력될까요?
아래 코드를 실행해 보세요.
let str = "Hello";
str.test = 5; // (*)
alert(str.test);
엄격 모드인지 아닌지에 따라 결과가 나뉩니다.
undefined
(비 엄격 모드)- An error (엄격 모드)
(*)
로 표시한 줄에서 무슨 일이 일어나는지 알아보면서, 왜 위와 같은 결과가 나타나는지 이해해 봅시다.
str
의 프로퍼티에 접근하려 하면 "래퍼 객체"가 만들어집니다.- 엄격 모드에선 래퍼 객체를 수정하려 할 때 에러가 발생합니다.
- 비 엄격 모드에선 에러가 발생하지 않습니다. 래퍼 객체에 프로퍼티
test
가 추가되죠. 그런데 래퍼 객체는 바로 삭제되기 때문에 마지막 줄이 실행될 땐 프로퍼티test
를 찾을 수 없습니다.
위 예시를 통해 원시값과 객체는 다르다는 것을 다시 한번 확인해 보았습니다.
원시값은 추가 데이터를 저장할 수 없습니다.