동그란 도그린
[모던 자바스크립트 Deep Dive🦎] 10장 : 객체 리터럴 본문
📍 객체
- 자바스크립트는 객체 기반의 프로그래밍 언어
- 객체는 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)
- 원시 값은 변경 불가능한 값, 객체 값은 변경 가능한 값
- 객체는 0개 이상의 프로퍼티로 구성된 집합
- 프로퍼티
- 프로퍼티는 키와 값으로 구성
- 모든 값은 프로퍼티가 될 수 있음
- 프로퍼티 값이 함수이면, 이를 메서드라고 부름
- 객체는 프로퍼티와 메서드로 구성된 집합체
- 프로퍼티 : 객체의 상태
- 메서드 : 프로퍼티를 참조하고 조작할 수 있는 동작
📍 객체 리터럴에 의한 객체 생성
- 자바스크립트는 프로토타입 기반 객체지향 언어로, 다양한 객체 생성 방법 지원
- 객체 리터럴
- Object 생성자 함수
- 생성자 함수
- Object.create 메서드
- 클래스(ES6)
- 객체 리터럴
- 중괄호 내에 0개 이상의 프로퍼티 정의
- 객체 리터럴의 중괄호는 코드 블록을 의미하지 X, 객체 리터럴은 값으로 평가되는 표현식이므로 뒤에 세미콜론을 붙임
- 프로퍼티를 정의하지 않으면 빈 객체 생성
var empty = {}; // 빈 객체
console.log(typeof empty); // => object
📍 프로퍼티
- 프로퍼티 나열 시 쉼표( , )로 구분
- 프로퍼티 키는 반드시 식별자 네이밍 규칙을 따라야 하는 것은 아님, 따르지 않는 이름에는 반드시 따옴표로 묶어야 함
var person = {
firstName : 'Ung-mo', // 식별자 네이밍 규칙을 따르는 프로퍼티 키
'last-name' : 'Lee', // 식별자 네이밍 규칙을 따르지 않는 프로퍼티 키
};
- 빈 문자열을 프로퍼티 키로 사용해도 에러 발생 X, 하지만 키로서의 의미를 갖지 못하므로 권장 X
var foo = {
'': ''
};
console.log(foo); // {"": ""}
- 프로퍼티 키에 문자열이나 심벌 값 외의 값을 사용하면 암묵적 타입 변환으로 인해 문자열이 됨
- 예약어를 프로퍼티 키로 사용해도 에러 발생 X, 에러 발생 여지가 있으므로 권장 X
- 이미 존재하는 프로퍼티 키를 중복 선언하면 먼저 선언한 프로퍼티를 덮어쓰고, 에러 발생 X
var foo = {
name: 'Lee',
nmae: 'Kim'
};
console.log(foo); // {name: "Kim"}
📍 프로퍼티 접근
- 프로퍼티 접근 방법은 2가지
- 마침표 표기법 : 마침표 프로퍼티 접근 연산자( . )를 사용
- 대괄호 표기법 : 대괄호 프로퍼티 접근 연산자( […] )를 사용
- 자바스크립트에서 사용 가능한 유효한 이름이면 2가지 방법 모두 사용 가능
- 대괄호 표기법을 사용하는 경우, 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 함, 프로퍼티 키가 숫자로 이루어진 문자열인 경우에는 따옴표 생략 가능 (감싸지 않으면 자바스크립트 엔진이 식별자로 해석함)
var person = {
nmae: 'Lee'
};
console.log(person[name]); // ReferenceError: name is not defined
- 객체에 존재하지 않는 프로퍼티에 접근하면 undefined를 반환, ReferenceError 발생 X
var person = {
name: 'Lee'
};
console.log(person.age); // undefined
📍 프로퍼티 값 갱신
- 이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값이 갱신됨
📍 프로퍼티 삭제
- delete 연산자를 통해 객체의 프로퍼티를 삭제
- 존재하지 않는 프로퍼티를 삭제하면 에러 없이 무시됨
📍 ES6에서 추가된 객체 리터럴의 확장 기능
- ES6에서는 프로퍼티 값으로 변수 사용 시, 변수 이름과 프로퍼티 키가 동일한 이름이면 프로퍼티 키 생략 가능
let x = 1, y = 2;
const obj = { x,y };
console.log(obj); // {x: 1, y: 2}
- ES6에서는 계산된 프로퍼티 이름으로 프로퍼티 키 동적 생성 시 객체 리터럴 외부에서 대괄호 표기법을 사용하는 법 외에 객체 리터럴 내부에서도 동적 생성 가능
// ES5
var prefix = 'prop';
var i = 0;
var obj = {};
// 객체 리터럴 외부에서 대괄호 표기법 이용
obj[prefix + '-' + ++i] = i;
console.log(obj); // => {prop-1: 1}
// ES6
const prefix = 'prop';
let i = 0;
// 객체 리터럴 내부에서 동적 생성
const obj = {
[`${prefix}-${++i}`]: i
};
console.log(obj); // => {prop-1: 1}
- ES6에서 메서드 정의 시 function 키워드 생략 가능
// ES5
var obj = {
sayHi: function() {
console.log('Hi');
}
};
obj.sayHi(); // Hi
// ES6
const obj = {
sayHi() {
console.log('Hi');
}
};
obj.sayHi(); // Hi
'FrontEnd > Javascript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive🦎] 12장 : 함수 (0) | 2023.05.06 |
---|---|
[모던 자바스크립트 Deep Dive🦎] 11장 : 원시 값과 객체의 비교 (0) | 2023.04.26 |
[모던 자바스크립트 Deep Dive🦎] 9장 : 타입 변환과 단축 평가 (0) | 2023.04.06 |
[모던 자바스크립트 Deep Dive🦎] 8장 : 제어문 (0) | 2023.03.29 |
[모던 자바스크립트 Deep Dive🦎] 7장 : 연산자 (0) | 2023.03.29 |
Comments