배열과 객체를 쓰는 이유는 데이터의 양이 유동적으로 변하기 때문에 어떤 데이터 타입을 쓸지 예측하기가 어렵다. 그래서 동적으로 데이터를 관리하는 공간인 힙을 사용하게 됐다.
원시 타입(Boolean , number ,String) 은 값을 저장하기 때문에 독립적이다.
let originalValue = 200;
undefined
let valueNew =originalValue;
undefined
orginalvalue =100;
100
valueNew
200
참조타입은 말 그대로 주소를 복사하기 때문에 데이터를 바꾸면 새로운 변수에도 영향을 미친다.
1. 왜 이런 현상이 발생할까?
원시 타입은 특정한 메모리에 할당받아 저장하는 반면 객체, 배열은 특정한 공간 힙에 저장하게 된다. 왜냐하면 단순히 메모리 공간 에 저장할 경우 배열을 찾고 수정하기가 어렵다. 만약 let e= [1,2,3] let f=[b,3.c]라고 해보자. a~ z까지 3의 요소를 다 갖고 있으면 3을 찾기 위해 모든 배열을 뒤져야 하는 상황이 발생한다. 그러므로 배열은 따로 주소 값을 변수에 주어 힙에서 주소에 따라 그 값을 찾게 만들었다.
Null vs undefined 의 차이
Null은 값은 정의 되었으나 어떠한 값도 할당되지 않는 상태
undefiend 는 변수 조차도 선언되지 않는 상태
객체 햇갈리는 문제
score에 80이라는 데이터 값이 할당됐고 함수가 정의 됐을 때 함수를 실행하면
score가 90으로 바뀌냐? 아니다 왜냐하면 value에 80이라는 값만 할당하기 때문에 score가 90으로 바뀌지만 score 자체는 변하는게 없다.
'코드스테이츠' 카테고리의 다른 글
코드스테이츠 closure 사용 && 캡슐화의 이해 (0) | 2021.08.04 |
---|---|
코드스테이츠 스코프 (0) | 2021.08.04 |
코드스테이츠 목업 (0) | 2021.08.04 |
코드스테이츠 중급 (0) | 2021.08.03 |
객체 (0) | 2021.08.03 |