자바스크립트 데이터 타입

고유·2022년 3월 17일
1

자바스크립트

목록 보기
3/6

1. 원시타입

원시타입의 값들은 메모리 공간을 새로 확보하여 독립적인 값을 저장한다.

1) number

  • C나 Java같은 다른 프로그래밍 언어는 number도 int, double, float 등 정수, 실수, 크기에 따라 다양하게 나뉜다.
  • 그러나 자바스크립트는 number 하나만을 사용한다.
  • 다이나믹 타이핑과 관련해서 '+' 연산자를 제외한 다른 사칙연산자는 숫자의 형태를 갖고 있는 (NaN이 아닌) string의 경우에도 연산을 허용한다.
console.log("8" / "4") === 2 (type number)

2) string

  • 다이나믹 타이핑과 관련하여 알아두면 된다.
  • 연산하는 값에 string 타입이 있고 '+' 연산자라면 string으로 본다.
console.log("8" + 4) === 84 (type string)

3) boolean

  • true / false로 어떤 연산자를 쓰는 지에 따라 false로 보는 범위가 달라지는지 알아놓자.
  • ""(빈 string)과 0도 false로 볼 것이냐 안 볼 것이냐

4) null과 undefined

  • 엄연히 다른 타입이다.
  • null은 선언을 하고 그 안에 빈 값을 고의적으로 할당한 상태이다.
  • undefined도 선언은 했으나 값을 할당하지 않은 상태이다.

2. 참조타입

메모리에 직접 접근하지 않고 메모리 주소에 대한 간접적인 참조를 통해 메모리 값에 접근한다.

  • 객체와 배열이 여기에 해당된다.

3. 정리

예를 들어서 정리해보자

1) 원시타입

let a = 3
let b = a
b = 5

console.log(a, b)
// a=3, b=5
  • 만약 a라는 변수가 3이라는 값이 할당되어 있고 그 a를 b라는 변수에 할당한 경우라고 가정해보자.
  • b의 값을 5로 수정한 경우 a의 값은 여전히 3이고 5로 변하지는 않는다.

2) 참조타입

let a = {
	number: 3
}
let b = a

b.number = 5

console.log(a.number, b.number)
// a=5, b=5
  • a라는 객체 속성에 3이라는 값이 있고 a를 b에 복사한 경우라면?
  • b의 속성 값을 5로 변경한 경우 a의 속성 값도 5로 변한다.
  • a가 가리키고 있는 객체와 b가 가리키고 있는 객체는 똑같기 때문이다.
  • (메모리 주소에 대한 간접적인 참조를 통해 메모리에 접근하기에 결국 가리키는 객체 값이 같은 것임).
  • a 변수에 담긴 것은 실제로 저 객체가 아닌 객체가 담겨 있는 메모리의 주소의 값을 가지고 있는 것이다.
  • (참조가 아닌 정말 Clone을 하고 싶은 경우라면 Object.assign을 사용하면 된다.)

이것이 원시타입과 참조타입의 차이이다

4. 생각

  • 자료형이 string인데 숫자 연산이 가능해지는 게,, 다이나믹 타이핑을 보니까 저래서 타입스크립트를 쓰는 거구나 싶더라
  • 그리고 참조타입은 좀 신박했따. 일반적으로는 원시타입처럼 생각할 것 같은데 변수에 값이 저장되어 있는 것이 아니라 '참조'하고 있는 것이라고 하니까.
  • 그리고 객체는 대체 왜 const로 선언해도 나중에 속성의 값을 수정할 수 있는 것일까
profile
프론트엔드

0개의 댓글