숫자(Number)
불린(Boolean)
null
undefined
문자열(String)let x = 100; let y = x; x = 99; y; // 100; // 데이터 값이 복사되기 때문에 기존의 데이터에 영향을 주지 않음.
원시 타입 데이터는 변수에 할당될 때 메모리 상에 고정된 크기로 저장되고 해당 변수가 원시 데이터의 값을 보관한다.
원시 타입 자료형은 모두 변수 선언, 초기화, 할당시 값이 저장된 메모리 영역에 직접적으로 접근한다.
즉 변수에 새 값이 할당 될 때 변수에 할당된 메모리 블럭에 저장된 값을 바로 변경한다는 뜻이다.
객체
배열
함수let x = {"num": 100}; // 참조 타입 선언 let y = x; x.num = 99; y.num; //-> 99, // 참조(주소)를 복사하는 것이기 때문에 , // 동일한 객체를 가리킴
참조 타입 데이터는 크기가 정해져 있지 않고 변수에 할당될 때 값이 직접 해당 변수에 저장될 수 없다. 변수에는 데이터에 대한 참조만 저장된다.
변수의 값이 저장된 힙(Heap) 메모리의 주소값을 저장한다.
참조 타입은 변수의 값이 저장된 메모리 블럭의 주소를 가지고 있고, 자바스크립트 엔진이 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근한다.
let myArray = [2, 3, 4, 5]; let ourArray = myArray; ourArray[2] = 25; console.log(myArray === ourArray) // -> true ourArray = undefined; console.log(myArray === ourArray) //-> false
myArray의 값은?
myArray의 값 : [2,3,4,5]
마지막 ourArray에 원시 자료형 undefined가 할당되었기 때문에, 더이상 myArray와 같은 참조를 가지고 있지 않다.
즉, ourArray는 undefined라는 원시 자료형을 할당받고 있다.
let score = 80; function doStuff(value) { value = 90; } doStuff(score)
socre의 값은?
let score = 80; function doStuff(value) { console.log(value); //-> 80 // 1) 함수 내부에서 let value = 80이 할당된 것과 같다. value = 90; //-> 2) value에 90 이 재할당된다! } doStuff(score) // -> 80