[JS] 모던 자바스크립트 - 06. 객체 리터럴
객체
- 자바스크립트는 프로토타입 기반 객체지향 언어로, 다양한 객체 생성방법을 지원(객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스(ES6))
- 원시 값을 제외한 나머지값은 모두 객체(함수, 배열, 정규 표현식 등)
- 원시 값은 변경 불가능한 값(immutable value)이지만 객체는 변경 가능한 값(mutable value)
- 함수는 일급객체이므로 값으로 취급할 수 있음
- 객체는 프로퍼티와 메서드로 구성된 집합체
- 인스턴스란 클래스에 의해 생성되어 메모리에 저장된 실체
- 객체 리터럴은 중괄호({...}) 내에 0개 이상의 프로퍼티를 정의
- 변수에 할당되는 시점에 객체 리터럴을 해석해 객체를 생성
- 객체 리터럴의 중괄호는 코드 블록을 의미하지 않음, 세미 콜론을 붙인다
프로퍼티
- 객체는 프로퍼티의 집합, 프로퍼티는 키와 값으로 구성
- 프로퍼티 키는 문자열, 따옴표로 묶어야 함, 자바스크립트의 식별자 네이밍 규칙을 준수한다면 따옴표 생략 가능
- 프로퍼티 키로 사용할 표현식을 대괄호([...])로 묶으면 프로퍼티 키를 동적으로 생성 가능
- 프로퍼티 키에 문자열이나 심벌 값 외의 값을 사용 시 문자열로 암묵적 타입 변환
- 존재하는 프로퍼티 키를 중복 선언 시 나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어씀
- 프로퍼티의 값이 함수일 경우 일반 함수와 구분하기 위해 메서드(method)라 부름, 메서드는 객체에 묶여 있는 함수를 의미
- 메서드 내부에서 사용한 this 키워드는 객체 자신이다
- 대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 키는 반드시 문자열이어야 함
- 객체에 존재하지 않는 프로퍼티에 접근 시 undefined 반환
- 프로퍼티의 키가 식별자 네이밍 규칙을 준수하지 않는 이름이면 반드시 대괄호 표기법 사용
- 프로퍼티 키가 숫자로 이뤄진 문자열인 경우 따옴표 생략 가능
- 존재하지 않는 프로퍼티에 값 할당 시 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당
- delete 연산자는 객체의 프로퍼티를 삭제, 존재하지 않는 프로퍼티 삭제 시 에러 없음
- ES6에서는 프로퍼티 값으로 변수를 사용하는 경우 변수 이름과 프로퍼티 키가 동일한 이름일 때 프로퍼티 키 생략 가능. 프로퍼티 키는 변수 이름으로 자동 생성
// ES6
let x = 1, y = 2;
// 프로퍼티 축약 표현
const obj = { x, y };
console.log(obj); // {x:1, y:2}
출처
- 모던 자바스크립트 Deep Dive - 자바스크립트의 기본 개념과 동작 원리