변수 선언과 동적 타이핑
JavaScript에서 변수는 var, let, 또는 const 키워드를 사용해 생성할 수 있다. 가장 기본적인 형태는 var를 이용하는 것이다.
var userName = "Alice";
var userAge = 25;
- var: 변수 선언을 의미하는 키워드.
- =: 값을 할당하는 연산자로, 오른쪽의 값을 왼쪽 변수에 저장한다.
- ;: 문장 종료 기호. 생략 가능하지만 명시하는 것이 좋다.
- 문자열 값은 작은따옴표(
')나 큰따옴표(")로 감싸야 한다.
변수는 선언 후 읽기 및 수정이 가능하다.
console.log(userAge); // 출력: 25
userAge = 30; // 값 변경
동적 타입 시스템
JavaScript는 런타임에 따라 변수의 타입이 결정되는 동적 타입 언어이다. 같은 변수라도 다른 타입의 값을 가질 수 있다.
let data = 42; // number
data = "Hello World"; // string
data = true; // boolean
이는 Java나 C++과 같은 정적 타입 언어와 대비된다. 정적 언어에서는 변수 선언 시 타입이 고정되며, 이후 변경 불가능하다.
기본 데이터 타입
JavaScript는 주요한 원시 타입(primitive type)을 여섯 가지 제공한다:
- number: 정수와 실수 구분 없이 모두 숫자형으로 처리.
- string: 텍스트 데이터.
- boolean:
true또는false. - undefined: 선언되었으나 값이 할당되지 않은 상태.
- null: 의도적으로 비어 있음을 나타내는 값.
숫자형 (Number)
모든 숫자는 단일 number 타입으로 표현되며, 다양한 진법 표기도 지원한다.
const decimal = 100; // 10진수
const octal = 0o77; // 8진수 (ES6 이상)
const hex = 0xFF; // 16진수
const binary = 0b1101; // 2진수
특수한 숫자 값들도 존재한다:
Infinity: 무한대 (예:1 / 0)-Infinity: 음의 무한대NaN: "Not-a-Number" — 유효하지 않은 산술 결과
console.log(100 * Number.MAX_VALUE); // Infinity
console.log("abc" * 2); // NaN
console.log(isNaN("abc" * 2)); // true
문자열 (String)
문자열은 작은따옴표 또는 큰따옴표로 묶는다. 내부에 따옴표를 포함하려면 이스케이프 문자나 혼합 사용이 필요하다.
let message = "He said, \"Hello!\"";
let quote = 'She said, "Hi!"';
주요 이스케이프 시퀀스:
\n: 줄바꿈\\: 백슬래시 자체\",\': 따옴표 포함\t: 탭 간격
문자열 길이는 .length 속성으로 확인 가능하다.
console.log("JavaScript".length); // 10
두 문자열은 + 연산자로 연결할 수 있으며, 문자열과 다른 타입 결합 시 암시적 변환이 발생한다.
let result = "Score: " + 95; // "Score: 95"
console.log("50" + 50); // "5050" (문자열 결합)
console.log(50 + 50); // 100 (산술 덧셈)
불리언 (Boolean)
논리값 true와 false로 조건 판단에 사용된다. 산술 연산 시 각각 1과 0으로 취급되지만, 이는 권장되지 않는다.
console.log(true + 1); // 2 (권장 X)
console.log(false + 1); // 1 (권장 X)
undefined 와 null
undefined는 변수가 선언되었으나 초기화되지 않았을 때의 기본값이다.
let temp;
console.log(temp); // undefined
console.log(temp + "test"); // "undefinedtest"
console.log(temp + 10); // NaN
null은 개발자가 의도적으로 "값 없음"을 나타낼 때 사용한다.
let item = null;
console.log(item + 20); // 20 (null은 숫자 연산에서 0으로 취급됨)
console.log(item + "text"); // "nulltext"
핵심 차이점:
- undefined: "아직 정의되지 않음"
- null: "의도적으로 비어 있음"
연산자 종류
산술 연산자
기본적인 수학 연산을 수행한다.
+ - * / % **
%: 나머지 연산**: 거듭제곱 (ES2016 추가)
할당 및 복합 할당 연산자
= // 할당
+= // 예: a += 5 → a = a + 5
-=, *=, /=, %= 도 동일한 방식
증감 연산자
값을 1씩 증가 또는 감소시킨다.
let count = 0;
count++; // 후위 증가 → 사용 후 1 증가
++count; // 전위 증가 → 먼저 1 증가 후 사용
비교 연산자
두 값을 비교하여 불리언 결과 반환.
==: 느슨한 비교 (타입 강제 변환 적용)===: 엄격한 비교 (타입과 값 모두 동일해야 함)
console.log(5 == "5"); // true
console.log(5 === "5"); // false
논리 연산자
조건 조합에 사용된다.
&&: AND — 모두 참일 때 참||: OR — 하나라도 참이면 참!: NOT — 반전
비트 연산자 및 시프트 연산
정수의 이진수 표현을 기반으로 한 연산.
<<: 왼쪽 시프트 (왼쪽으로 이동, 0으로 채움)>>: 오른쪽 산술 시프트 (부호 유지)>>>: 오른쪽 논리 시프트 (항상 0으로 채움)
console.log(8 << 1); // 16 (8 * 2)
console.log(8 >> 1); // 4 (8 / 2)