본문으로 건너뛰기

부록 B: 자바스크립트 레퍼런스


1. 기본 데이터 타입

types.js
// 원시 타입
const num = 42;
const str = '문자열';
const bool = true;
const undef = undefined;
const nullVal = null;
const bigint = 123n;
const sym = Symbol('id');

// 타입 확인
typeof value;
Array.isArray(value);
value instanceof Constructor;

2. 변수 선언

variables.js
// 권장 방식
const 상수 = '변경불가';
let 변수 = '변경가능';

// 템플릿 리터럴
const message = `안녕 ${name}`;

// 구조 분해
const { a, b } = obj;
const [x, y] = arr;

3. 연산자

operators.js
// 비교
=== // 엄격한 비교
!== // 엄격한 불일치

// 최신 연산자
?? // Nullish coalescing
?. // Optional chaining
||= // 논리 OR 할당
&&= // 논리 AND 할당
??= // Nullish 할당

// 전개 구문
[...arr1, ...arr2]
{...obj1, ...obj2}

4. 함수

functions.js
// 함수 정의
function func() {}
const func = function() {};
const func = () => {};

// 매개변수
function(a, b = 기본값, ...rest) {}

// 고차 함수
const 곱하기 = x => y => x * y;
const 두배 = 곱하기(2);

5. 배열 메서드

array-methods.js
// 변환
arr.map(item => 변환된값);
arr.filter(item => 조건);
arr.reduce((acc, item) => acc + item, 0);

// 검색
arr.find(item => 조건);
arr.findIndex(item => 조건);
arr.includes();
arr.indexOf();

// 최신 메서드
arr.at(-1); // 마지막 요소
arr.findLast(조건);
arr.toSorted();
arr.toReversed();
arr.with(index, 새값);

// 기타
arr.forEach(item => {});
arr.some(조건);
arr.every(조건);

6. 객체 메서드

object-methods.js
// 속성 조작
Object.keys(obj)
Object.values(obj)
Object.entries(obj)
Object.assign(target, source)

// 생성/복사
Object.create(prototype)
{...obj} // 얕은 복사
structuredClone(obj) // 깊은 복사

// 검사
Object.hasOwnProperty(key)
Object.getOwnPropertyNames(obj)
Object.getPrototypeOf(obj)

7. 문자열 메서드

string-methods.js
// 검색/확인
str.includes(substring);
str.startsWith(prefix);
str.endsWith(suffix);
str.indexOf(substring);

// 변환
str.toLowerCase();
str.toUpperCase();
str.trim();
str.replace(찾을값, 바꿀값);
str.replaceAll(찾을값, 바꿀값);

// 분할/결합
str.split(구분자);
arr.join(구분자);
str.slice(start, end);
str.substring(start, end);

// 패딩
str.padStart(길이, 문자);
str.padEnd(길이, 문자);

8. 숫자 메서드

number-methods.js
// 파싱
Number();
parseInt(, 진수);
parseFloat();

// 검사
Number.isNaN();
Number.isInteger();
Number.isFinite();

// 반올림
Math.round();
Math.floor();
Math.ceil();
.toFixed(소수점자리);

// 기타
Math.max(...arr);
Math.min(...arr);
Math.random();

9. 날짜 (Date)

date-methods.js
// 생성
new Date();
new Date('2024-01-01');
Date.now();

// 조회
date.getFullYear();
date.getMonth(); // 0부터 시작
date.getDate();
date.getDay(); // 요일 (0=일요일)

// 설정
date.setFullYear(년도);
date.setMonth();
date.setDate();

// 문자열 변환
date.toISOString();
date.toLocaleDateString('ko-KR');
date.toLocaleTimeString('ko-KR');

10. 정규표현식

regex.js
// 생성
/패턴/플래그
new RegExp('패턴', '플래그')

// 플래그
/패턴/g // 전역 검색
/패턴/i // 대소문자 무시
/패턴/m // 멀티라인

// 메서드
regex.test(문자열) // 불린 반환
str.match(regex) // 매치 배열
str.replace(regex, 대체값)
str.split(regex)

// 자주 쓰는 패턴
/\d+/ // 숫자
/\w+/ // 단어 문자
/\s+/ // 공백
/^시작/
/$/

11. Promise와 비동기

async.js
// Promise 생성
new Promise((resolve, reject) => {});

// 사용
promise.then( => {});
promise.catch(에러 => {});
promise.finally(() => {});

// async/await
async function 함수명() {
try {
const 결과 = await promise;
} catch (에러) {}
}

// 조합
Promise.all([p1, p2, p3]);
Promise.allSettled([p1, p2, p3]);
Promise.race([p1, p2, p3]);
Promise.any([p1, p2, p3]);

12. 모듈

modules.js
// 내보내기
export const 변수 =;
export function 함수() {}
export default 기본값;

// 가져오기
import { 변수, 함수 } from './파일.js';
import 기본값 from './파일.js';
import * as 별칭 from './파일.js';

// 동적 import
const 모듈 = await import('./파일.js');

13. DOM 조작

dom.js
// 선택
document.querySelector('선택자');
document.querySelectorAll('선택자');
document.getElementById('id');

// 생성/조작
document.createElement('태그');
element.innerHTML = 'HTML';
element.textContent = '텍스트';
element.setAttribute('속성', '값');

// 클래스 조작
element.classList.add('클래스');
element.classList.remove('클래스');
element.classList.toggle('클래스');
element.classList.contains('클래스');

// 이벤트
element.addEventListener('이벤트', 핸들러);
element.removeEventListener('이벤트', 핸들러);

14. 이벤트

events.js
// 마우스 이벤트
('click', 'dblclick', 'mousedown', 'mouseup');
('mouseover', 'mouseout', 'mousemove');

// 키보드 이벤트
('keydown', 'keyup', 'keypress');

// 폼 이벤트
('submit', 'change', 'input', 'focus', 'blur');

// 윈도우 이벤트
('load', 'resize', 'scroll', 'beforeunload');

// 이벤트 객체
event.preventDefault();
event.stopPropagation();
event.target;
event.currentTarget;

15. 에러 처리

errors.js
// 기본 에러 처리
try {
// 코드
} catch (error) {
console.error(error.message);
} finally {
// 정리 코드
}

// 커스텀 에러
class CustomError extends Error {
constructor(message) {
super(message);
this.name = 'CustomError';
}
}

throw new CustomError('에러 메시지');

16. JSON

json.js
// 변환
JSON.stringify(객체); // 객체 → JSON 문자열
JSON.parse(JSON문자열); // JSON 문자열 → 객체

// 옵션
JSON.stringify(객체, null, 2); // 들여쓰기
JSON.stringify(객체, ['키1', '키2']); // 특정 속성만

// 안전한 파싱
function safeJsonParse(str, defaultValue = null) {
try {
return JSON.parse(str);
} catch {
return defaultValue;
}
}

17. 스토리지

storage.js
// 로컬 스토리지 (영구 저장)
localStorage.setItem('키', '값');
localStorage.getItem('키');
localStorage.removeItem('키');
localStorage.clear();

// 세션 스토리지 (탭 닫으면 삭제)
sessionStorage.setItem('키', '값');
sessionStorage.getItem('키');

// JSON 객체 저장
localStorage.setItem('키', JSON.stringify(객체));
JSON.parse(localStorage.getItem('키'));

18. Fetch API

fetch.js
// 기본 GET
fetch('url').then(response => response.json());

// POST 요청
fetch('url', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(데이터),
});

// async/await 사용
async function fetchData() {
const response = await fetch('url');
const data = await response.json();
return data;
}

// 에러 처리
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}

19. 클래스

classes.js
// 기본 클래스
class MyClass {
constructor() {
this.속성 =;
}

메서드() {
return this.속성;
}

static 정적메서드() {
return '정적';
}
}

// 상속
class 자식클래스 extends 부모클래스 {
constructor() {
super();
}

메서드() {
return super.메서드() + ' 확장';
}
}

// 프라이빗 필드
class PrivateClass {
#private = '비공개';

getPrivate() {
return this.#private;
}
}

20. Map과 Set

map-set.js
// Map (키-값 쌍)
const map = new Map();
map.set('키', '값');
map.get('키');
map.has('키');
map.delete('키');
map.clear();
map.size;

// Map 순회
for (const [,] of map) {
}

// Set (고유값 집합)
const set = new Set();
set.add('값');
set.has('값');
set.delete('값');
set.clear();
set.size;

// Set 순회
for (constof set) {
}

21. 유용한 유틸리티

utils.js
// 배열 중복 제거
[...new Set(배열)];

// 객체 깊은 복사
structuredClone(객체);

// 랜덤 정수
Math.floor(Math.random() * (최대 - 최소 + 1)) + 최소;

// 지연 함수
const delay = ms => new Promise(resolve => setTimeout(resolve, ms));

// 디바운스
function debounce(func, wait) {
let timeout;
return function (...args) {
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(this, args), wait);
};
}

// 쓰로틀
function throttle(func, limit) {
let inThrottle;
return function (...args) {
if (!inThrottle) {
func.apply(this, args);
inThrottle = true;
setTimeout(() => (inThrottle = false), limit);
}
};
}

22. 최신 문법 치트시트

modern-js.js
// ES2020+
obj?.prop?.method?.() // Optional chaining
arr?.[0] // 배열 optional chaining
value ?? '기본값' // Nullish coalescing

// ES2021
||= // 논리 OR 할당
&&= // 논리 AND 할당
??= // Nullish 할당

// ES2022
arr.at(-1) // 음수 인덱스
/regex/d // 정규식 인덱스
class { #private } // 프라이빗 필드
await import('module') // 탑레벨 await

// ES2023
arr.findLast(조건)
arr.findLastIndex(조건)
arr.toSorted()
arr.toReversed()
arr.with(index, value)

23. 디버깅과 성능

debug-performance.js
// 콘솔 메서드
console.log();
console.error(에러);
console.warn(경고);
console.table(배열 / 객체);
console.group('그룹명');
console.time('타이머명');
console.timeEnd('타이머명');

// 성능 측정
performance.now();
performance.mark('시작');
performance.measure('측정', '시작');

// 메모리 사용량
console.log(performance.memory);

// 에러 추적
console.trace();

24. 브라우저 호환성 체크리스트

compatibility.js
// 기능 감지
if ('serviceWorker' in navigator) {
}
if (typeof fetch === 'function') {
}
if (window.IntersectionObserver) {
}

// 폴리필이 필요한 기능들
// - Promise (IE)
// - fetch (IE)
// - Array.from (IE)
// - Object.assign (IE)
// - Array.includes (IE)

// 최신 문법 지원 여부
// - Optional chaining (2020+)
// - Nullish coalescing (2020+)
// - Private fields (2022+)
// - Top-level await (2022+)