[JS] 리터럴과 변수, 상수, 데이터 타입

변수와 상수

변수란?

이름이 붙은 값으로, 해당 값은 언제든 바뀔 수 있다.

var a = 1;
let b = 2;
let c, d = 3 , e = 4;

let 문 하나에서 여러개 변수를 할당할 수 있다. (초깃값을 할당하지 않은 c 는 undefined가 할당된다.)

 

상수란?

변수와 마찬가지로 값을 할당할 수 있지만, 그 값이 바뀔 수는 없다.

상수 이름에는 보통 대문자, 밑줄만 사용한다.

 

변수 vs 상수

될 수 있으면 변수보다는 상수를 써야한다.

상수를 사용하면 값이 바뀌면 안되는 데이터에서 실수로 값이 바뀌는 일들이 줄어든다.

우선 상수로 먼저 생각하고 그 값이 바뀌는게 자연스럽다고 판단되면, 언제든지 변수로 바꾸면 된다.

 

식별자 이름

  • 글자, 달러기호, 밑줄(_)로 시작해야 한다. 
  • 글자, 숫자, 달러기호, 밑줄만 사용할 수 있다.
  • 파이와 같은 유니코드 문자도 사용할 수 있다.
  • 예약어는 식별자로 사용할 수 없다.

카멜케이스, 스네이크 케이스 등의 표기법을 대체로 사용한다.

 

리터럴

값을 만드는 방법이다.

자바스크립트는 내가 제공한 리터럴 값을 받아 데이터를 만든다.

let room = "room_a";

여기서 room 은 식별자 "room_a" 는 문자열 리터럴이다. 

리터럴은 데이터 값 그자체로 볼 수 있다.

 

원시타입(Primitive)과 객체(Object)

자바스크립트의 값은 원시 값 또는 객체이다. 

 

원시타입 (Primitive, Value)

원시타입은 불변(immutable)이다.

불변성이라는 것이 값이 바뀔 수 없다 를 뜻하는 것은 아니다.

값이 변경되면 변경된 값이 들어있는 새로운 메모리가 할당된다.

스택영역에 저장된다. 

  • number
  • string
  • boolean
  • null
  • undefined
  • Symbol

**주의** null은 primitive 이지만 typeof null; 을 실행시켰을 때 object를 반환한다. 

객체(Object, Reference)

원시 값과 달리 여러가지 형태와 값을 가질 수 있으며, 원시 값을 제외한 모든 것이 객체다.

의미있는 정보와 기능을, 어떤 형태든, 원하는 구조로 담는, 프로퍼티를 갖는 하나의 단위이다.

영역에 저장된다. (스택영역과는 달리 가변적)

  • Array
  • Date
  • RegExp
  • Map, WeakMap
  • Set, WeakSet
const n = 123; // number 타입
const bi = 123n; // bigInt 타입
const s = 'abc'; // string 타입
const sss = new String('abc'); // object 타입
const b = true; // boolean 타입
const bb = new Boolean(); // object 타입

const o1 = {}; // object 타입
const o2 = new Object(); // object 타입
console.log(o1 === o2); //false

 

 

Primitive(Value) vs Object(Reference)

const a = 1; // 원시타입
const b = [1,2,3]; // 객체타입

그림과 같이 원시타입은 해당 메모리 주소로 갔을때 바로 값을 담고있고 객체타입은 또 다른 메모리 주소를 담고 있다.

이와 같은 이유로 객체타입은 참조타입이라고도 불린다.

 

Primitive - Call by Value / Object - Call by Reference

 

형변환

const n = 123;
n.toString(16); //"123"을 16진수로 바꿈
parseInt("123",16); //"123"을 16진수로 바꿈
parseFloat();

d1 = new Date(); d2 = Date();
//typeof d1 => object, typeof d2 => string
d2.getTime() // => Uncaught TypeError getTime is not a function

str = "234";
n + str // "123234" '+'는 문자열 병합 연산자
  • '+' 는 문자열 병합 연산자
  • '*' 는 그냥 산술 연산자

암묵적 형변환

해당라인에서만 순간적으로 형변환 되고, 다시 원래대로 돌아온다.

n = 123;
n.toString(); //

이론적으로는 .toString() 이 안되야 맞지만 n.toString()이 실행되는 그 순간에만 n이 객체 타입으로 바뀌면서 n의 타입을 string으로 변환한다.

 

 

 

'Dev > Javascript' 카테고리의 다른 글

[JS] 클로저 (Closure)  (0) 2025.04.09
[JS] 스코프  (2) 2025.04.08
[JS] 실행 컨텍스트  (2) 2025.04.08
[JS] strict mode  (0) 2025.04.08
[JS] 디스트럭처링 할당 (해체 할당)  (0) 2025.04.08