변수와 상수
변수란?
이름이 붙은 값으로, 해당 값은 언제든 바뀔 수 있다.
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 |
