LECTURE/JavaScript
Object leteral - 객체, 프로퍼티, 메소드
heywoo
2023. 2. 7. 14:01
객체
자바스크립트는 객체 기반 프로그래밍 언어로 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체이다.
- 객체 : 0개 이상의 프로퍼티로 구성 된 집합이며
- 프로퍼티: 객체의 상태를 나타내는 키(key)와 값(value)으로 구성된다.
- 메소드 : 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior)으로 프로퍼티 값이 함수일 경우.
객체 생성 방법
1. 객체 리터럴
2. Object 생성자 함수
3. 생성자 함수
4. Object.create 메서드
5. Class(ES6)
이 중 가장 일반적이고 간단한 방법이 객체 리터럴을 사용하는 방법이다.
-> 중괄호 내 0개 이상의 프로퍼티를 정의한다.
var student = {
name : '유관순', // key값 : value값
age : 16,
getInfor : function(){
return `${this.name}(은)는 ${this.age}세 입니다.`;
} // 메소드
};
console.log(typeof student); // object
console.log(student); // { name: '유관순', age: 16, getInfor: [Function: getInfor] }
var student2 = {}; // 프로퍼티를 정의하지 않을 시 빈 객체 생성
console.log(typeof student2); // objct
console.log(student2); // {}
프로퍼티 (속성)
프로퍼티 키 : 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
문자열이므로 따옴표를 사용하지만 식별자 네이밍 규칙에 따르는 경우 사용하지 않아도 되며
식별자 네이밍 규칙을 따르지 않을 때에는 따옴표를 반드시 사용해야 한다. (하지만 규칙을 따를 것을 권장한다.)
프로퍼티 값 : 자바스크립트에서 사용할 수 있는 모든 값
var obj = {
normal : 'normal value',
'@ s p a c e @' : 'space value', //특수문자 사용시에는 ''사용
'' : '', //빈 문자열 키는 오류 발생하지 않지만 권장하지 않음
0 : 1, //숫자 키는 내부적으로 문자열로 변환
var : 'var', //예약어 키는 오류 발생하지 않지만 권장하지 않음
normal : 'new value' //이미 존재하는 키를 중복 선언하면 나중에 선언한 프로퍼티로 덮어씀
}
console.log(obj); //선언하는 순서대로 출력되진 않음. 내부적으로 결정됨.
// 출력 값
{
'0': 1,
normal: 'new value',
'@ s p a c e @': 'space value',
'': '',
var: 'var'
}
메소드
객체 내부에 정의된 함수로, 함수는 값으로 취급할 수 있고, 프로퍼티 값으로도 사용할 수 있다.
var dog = {
name : '뽀삐',
eat : function(food){
console.log(`${this.name}(은)는 ${food}를 맛있게 먹어요.`);
}
};
dog.eat('고구마');
// 출력 값
뽀삐(은)는 고구마를 맛있게 먹어요.
프로퍼티 접근
1. 마침표 표기법 (dot notation)
console.log(dog.name); // 뽀삐
dog.eat('고고마'); // 뽀삐(은)는 고고마를 맛있게 먹어요.
2. 대괄호 표기법 (square bracket notation)
- 프로퍼티 키는 반드시 따옴표로 감싼 문자열을 사용한다.
console.log(dog['name']); // 뽀삐
console.log(dog[name]); // -> 출력X
dog['eat']('고구마'); // 뽀삐(은)는 고구마를 맛있게 먹어요.
- 프로퍼티 키가 식별자 네이밍 규칙을 준수하지 않는 이름일 경우 반드시 대괄호 표기법을 사용한다.
var obj = {
'dash-key' : 'dash-value',
0 : 1
};
//console.log(obj.dash-key);
//console.log(obj.'dash-key');
//console.log(obj[dash-key]);
//위의 경우 다 에러
console.log(obj['dash-key']); //dash-value
- 프로퍼티 키가 숫자로 이루어진 문자열인 경우 대괄호 표기법에서 따옴표를 생략할 수 있다.
//console.log(obj.0);
//console.log(obj.'0');
// 위의 경우 다 에러
console.log(obj[0]); //1
console.log(obj['0']); //1
프로퍼티 변경, 추가, 삭제
- 이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값이 갱신된다. 거듭 할당해도 마찬가지임
var dog = {
name : '뽀삐'
};
dog.name = '두부';
dog['name'] = '두부';
console.log(dog.name); //두부
- 프로퍼티 동적 추가
존재하지 않는 프로퍼티 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당된다.
dog.age = 3;
dog['age'] =3;
console.log(dog);
// 출력 -> { name: '두부', age: 3 }
- 프로퍼티 삭제
delete 연산자는 객체의 프로퍼티를 삭제하며, 만약 존재하지 않는 프로퍼티를 삭제하면 에러없이 무시된다.
delete dog.age;
delete dog['age'];
console.log(dog);
// 출력 -> { name: '두부' }
delete dog.something; // ->무시됨