stack
이라는 저장소를 사용한다.number
undefined
boolean
string
bigint
symbol
null
let a = 1;
let b = a;
console.log(b); // 1
b = 2;
console.log(a); // 1
console.log(b); // 2
let b = a;
변수 a의 값 (원시자료형)을 변수 b에 할당하여 복사했다!
그리고 b의 값을 2로 재할당해주었는데, a의 값은 바뀌지 않았다.
변수 a와 변수 b의 관계는 데이터 값만 복사된 관계이다. 그래서 변수 b에 다른 값을 재할당해도 변수 a의 값은 바뀌지 않는다.
heap
이라는 저장소를 사용한다.array
object
function
let e = [10, 20];
let f = e;
console.log(e); // [10, 20]
console.log(f); // [10, 20]
f.push(30);
console.log(e); // [10, 20, 30]
console.log(f); // [10, 20, 30]
let f = e;
변수 f의 값 (참조자료형)을 변수 e에 할당하여 복사했다!
그리고 변수 f의 배열에 30이라는 값을 추가해주었는데, 변수 e의 배열에도 30이 추가되었다.
변수 f와 변수 e의 관계는 주소가 복사된 관계이다. 같은 주소값을 공유하고 있기 때문에 한 곳에서 데이터에 변경이 생기면 다른 한 곳에서도 데이터 변경이 생긴다.
공부하다가 궁금한 게 생겼다.
원시 자료형이 method
를 가지지 않는다니, 도대체 뭔 말이야?
string
, number
등 이런 원시 자료형을 다룰 수 있는 method
가 있지 않나?
만약 slice()
, substring()
, split()
등과 같이 문자열을 다루는 method
와 toFixed()
등과 같이 숫자를 다루는 method
들이 원시 자료형의 method
가 아니라면 도대체 누구의 method
인가?
알아보니 원시값 자체에 method
가 있는 게 아니라 원시값이 위 같은 메서드에 접근하는 순간! 특별한 객체가 만들어지고 접근 후에는 특별한 객체가 삭제된다고 한다.
원시 래퍼 객체 (object wrapper)
( String()
, Number()
, Boolean()
등… ) 라는 것이 원시 자료형들에게 메서드를 제공하고 있기 때문에 원시 자료형의 특징인 가벼움을 유지하면서 method
를 사용할 수 있는 것이다.
혹시나 잘못된 정보가 있다면 댓글로 알려주세요 ! 저의 성장의 큰 도움이 될 것 같습니다.🌱