카테고리 없음
[JS스터디] 객체 리터럴
yuull
2023. 4. 1. 14:12
객체
- 자바스크립트: 객체기반 프로그래밍 언어 (cf> 자바, C: 클래스 기반)
- 원시값 외의 모든 값은 객체
- 원시값은 변경 불가능, 객체는 변경 가능
객체
: 프로퍼티로 구성된 집합- 객체를 생성하는 방법: 객체 리터럴
{ }
/ 함수로 생성
- 객체를 생성하는 방법: 객체 리터럴
프로퍼티
: 키와 값으로 구성- 키는 <식별자 네이밍 규칙>을 따라야 한다. (따르지 않을 경우 따옴표로 감쌀 것)
- 동일한 키를 중복 선언하면? 덮어씀.
- 프로퍼티 값은 자바스크립트의 모든 값이 될 수 있음.
메소드
: 값이 함수인 경우 (일반 함수와 구분 위해 명칭)
- 프로퍼티 접근 방법: 1. dot연산자(.) 사용 / 2. 대괄호연산자([...]) 사용
- !! 주의 !! 대괄호 안의 키값은 반드시 "따옴표"로 감싼 문자열 - 안 그러면 식별자로 해석
- 객체에 존재하지 않는 프로퍼티 접근 시 -> undefined 반환 (ReferenceError X)
여기서 ReferenceError가 아닌 undefined를 반환하는 이유? 추측 상 객체의 프로퍼티가 동적으로 생성되면서 값을 할당하지 않은 상태라 undefined값이 자동 할당된 듯하다.
- 프로퍼티 동적 생성: 존재하지 않는 프로퍼티에 값을 할당 하면 동적으로 생성됨
- 프로퍼티 삭제:
delete person.age
delete person["age"]
- 존재하지 않는 프로퍼티를 삭제해도 에러 X(ES6) 객체 리터럴 확장 기능
ES6 추가된 객체리터럴 확장 기능
- 프로퍼티 축약 표현
위 두 코드는 모두let x = 1, y = 2; const obj = { x, y }; // 프로퍼티 키 생략하고 값만으로 객체 생성 가능 !!
{x: 1, y: 2}
라는 동일한 결과를 낸다.변수 이름과 프로퍼티 값이 동일한 경우
ES6부터는 프로퍼티 키를 생략할 수 있다.var x = 1, y = 2; var obj = { x: x, y: y };
- 계산된 프로퍼티 이름
문자열
또는문자열로 타입 변환할 수 있는 값으로 평가되는 표현식
을 사용해 프로퍼티 키 동적 생성 가능- 단, 이 경우 대괄호 [...] 사용
var prefix = 'prop'; var obj = {}; obj[prefix + '-' + 0] = 0;
두 번째 ES6 코드에서 만약 객체 리터럴 내에서 대괄호 [...] 없이 시도할 경우 SyntaxError가 난다.const prefix = 'prop'; let i = 0; const obj = { [`${prefix}-${++i}`]: i //주목: 객체리터럴 {} 내부에서도 동적 생성 가능 with 대괄호 [...] };
- 메서드 축약 표현
- ES5: 메서드 정의하려면 프로퍼티 값에 함수를 할당
var obj = { name: 'yul', sayHi: function() { ... } };
- ES6: 메서드 정의할 때 function키워드 생략 가능
const obj = { name: 'yul', sayHi() { ... } };
- 이 경우 프로퍼티에 할당한 함수와 다르게 동작
- ES5: 메서드 정의하려면 프로퍼티 값에 함수를 할당
* 스터디 교재: