원시 자료형
원시 자료형이란?
- number, string, boolean, undefined, null, symbol 등이 있다.
- 원시 타입이라고도 불린다.
- 원시 타입의 값은 변경 불가능한 값이다. (immutable value)
- 따라서 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다.
let a=5;
let b=a;
console.log(b) = 5 이지만
b=4로 재할당 했을 때,
console.log(b) = 4
console.log(a) = 5
참조 자료형
참조 자료형이란?
- 객체, 함수, 배열 등이 있다.
- 참조 타입, 객체 타입이라고도 불린다.
- 참조 타입의 값은 변경 가능한 값이다. (mutable value)
- 따라서 객체를 할당한 변수에는 생성된 객체가 실제로 저장된 메모리 공간의 주소가 저장되어 있어서 유동적으로 값을 변경시킬 수 있다.
let x = { foo: 3 };
let y = x;
y.foo = 2;
//x.foo는? 2이다.
헷갈리는 문제들
console.log('ABC' === 'ABC');
console.log(3.14 === 3.14);
console.log([1,2,3] === [1,2,3]);
console.log({ foo: 'bar' } === { foo: 'bar' });
//true, true, false, false
- 위의 값을 출력해보면 당연히 true, true, true, true 일 거라 생각하겠지만
true, true, false, false가 나온다.
- 왜 그럴까? 3번 째 줄의 앞의 [1, 2, 3]의 주소와 뒤의 [1, 2, 3]의 주소가 다르기 때문이다.
- 참조 자료형은 선언 되는 순간 주소 값과 메모리 값을 가지고 있다고 생각하면 편하다.
let x = { foo: 3 };
let y = x;
y = 2;
//x.foo는? 3이다.
let myArray = [2, 3, 4, 5];
let ourArray = myArray;
ourArray[2] = 25;
ourArray = undefined;
myArray의 값은? [2, 3, 25, 5]이다.
let score = 80;
function doStuff(value) {
value = 90;
}
doStuff(score)
//score의 값은? 80이다.