
ES6 도입 이후, 스코프(Scope) 명확성과 안전성 확보를 위해 let과 const 가 추가
https://hacks.mozilla.org/2015/07/es6-in-depth-let-and-const/
| 키워드 | 유효 범위 (Scope) | 재선언 | 호이스팅 동작 및 특징 |
|---|---|---|---|
var | 함수 레벨 | O | 초기화 전 undefined 반환 (오류 발생 가능성 높음) |
let | 블록 레벨 | X | TDZ(일시적 사각지대) 적용으로 선언 전 접근 시 에러 발생 |
const | 블록 레벨 | X | 값의 재할당이 불가능한 상수 (객체 내부 값은 변경 가능) |
기본적으로
const를 사용하고, 재할당이 반드시 필요한 경우에 한해let을 사용하는 것을 권장함.
| 연산자 | 설명 | 예시 (1 vs '1') | 권장 사항 |
|---|---|---|---|
== | 동등 비교 (값만 비교, 암묵적 타입 변환 발생) | true | 사용 지양 |
=== | 일치 비교 (값과 타입 모두 비교) | false | 기본 사용 |
A || B (논리합): A가 Falsy(거짓 같은 값)일 경우 B를 반환 (기본값 설정 시 주로 사용).A && B (논리곱): A가 Truthy(참 같은 값)일 경우 B를 반환 (조건부 실행 시 주로 사용).// 활용 예시
const name = userName || '홍길동'; // userName이 없으면 '홍길동' 할당
?.를 통해 좌항이 Truthy한 경우 우항을 반환. 이때 우항은 좌항의 프로퍼티.if (user && user.name && user.name.firstName) ...user?.address?.firstName ⇒ user객체에 address객체에 firstName을 반환. 이때, user와 address모두 null이나 undefined가 아니여야함.??를 통해 좌항이 null이나 undefined면 거짓으로 보고 오른쪽 값(기본값)을 반환한다.const age= 0 || 27 ⇒ 0을 Falsy로 판단, 27 반환const age = 0 ?? 27 ⇒ 위와 마찬가지// user가 없어도 에러가 나지 않고, city가 없으면 '서울'을 기본값으로 사용
const userCity = user?.address?.city ?? "서울";| 방식 | 문법 형태 | 특징 | 용도 |
|---|---|---|---|
| 객체 리터럴 | { key: value } | 직관적이며 작성이 간편함 | 설정 객체나 단일 데이터 구조 필요 시 |
| 생성자 함수 | new Func() | 동일 구조의 객체 양산 가능 | 유사한 객체를 반복 생성해야 할 시 |
{ name }).name : "홍길동"으로 자동 값 대입자바스크립트에서 함수는 값(Value)으로 취급되는 '일급 객체'의 특성을 가진다
자바스크립트는 클래스 기반이 아닌 프로토타입 기반의 객체지향 언어임. 상속은 부모 객체와의 연결 링크([[Prototype]])를 통해 구현됨
객체의 프로퍼티나 메서드 접근 시, 해당 객체에 없다면 상위 프로토타입을 순차적으로 탐색하는 메커니즘을 말함
직접 __proto__를 조작하는 것은 성능 이슈로 권장하지 않음
Object.create(proto): 특정 객체를 프로토타입으로 하는 새로운 객체 생성Object.getPrototypeOf(obj): 객체의 프로토타입 조회Object.setPrototypeOf(obj, proto): 객체의 프로토타입 변경const parent = { type: 'human' };
const child = Object.create(parent); // parent를 상속받은 child 생성
console.log(child.type); // 'human' (프로토타입 체인을 통해 접근)