
1) 객체
2) 객체 생성 방법
var student = {
// 프로퍼티 : 객체의 상태를 나타내는 값(data)으로 키-값 쌍으로 구성
name : '유관순',
age : 16,
// 메서드 : 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior)
getInfo : function(){
return `${this.name}(은)는 ${this.age}세 입니다.`
}
};
속성 이라는 뜻, 객체 내부의 속성
1) property
var obj = {
normal : 'normal value',
'@ s p a c e @' : 'space value', //특수문자 사용시에는 '' 사용
'' : '', //빈 문자열 키는 오류 발생하지 않지만 권장하지 않음
0 : 1, //숫자 키는 내부적으로 문자열로 변환
var : 'var', //예약어 키는 오류 발생하지 않지만 권장하지 않음
normal : 'new value' //이미 존재하는 키를 중복 선언하면 나중에 선언한 프로퍼티로 덮어 씀
};2) method
var dog = {
name : '뽀삐',
// 메소드 - 객체 내부에 정의 된 함수
eat : function(food){
console.log(`${this.name}(은)는 ${food}를 맛있게 먹어요.`);
}
};
3) property access
console.log(dog.name);
dog.eat('고구마');
//프로퍼티 키는 반드시 따옴표로 감싼 문자열을 사용한다.
console.log(dog['name']);
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]);
// 프로퍼티 키가 숫자로 이루어진 문자열인 경우 대괄호 표기법에서 따옴표를 생략할 수 있음.
console.log(obj[0]);
4) property change and remove
var dog = {
name : '뽀삐'
};
// 이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값이 갱신된다.
dog.name = '두부';
console.log(dog.name);
// 프로퍼티 동적 추가
// 존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성 되어 추가 되고 프로퍼티 값이 할당된다.
dog.age = 3;
console.log(dog);
// 프로퍼티 삭제
// delete 연산자는 객체의 프로퍼티를 삭제하며, 만약 존재하지 않는 프로퍼티를 삭제하면 에러 없이 무시된다.
delete dog.age;
delete dog['age'];
console.log(dog);
1) property value shorthand
var id = 'p-00001';
var price = 30000;
var product2 = {id, price}; // 프로퍼티 키는 변수 이름으로 자동 생성
console.log(product2);
2) computed property name
var prefix = 'key';
var index = 0;
var obj = {};
obj[prefix + ' - ' + index++] = index;
obj[prefix + ' - ' + index++] = index;
obj[prefix + ' - ' + index++] = index;
var obj2 = {
[`${prefix} - ${index++}`] : index,
[`${prefix} - ${index++}`] : index,
[`${prefix} - ${index++}`] : index,
};
3) method shortcut
var dog = {
name : '뽀삐',
eat : function(food){
return `${this.name}(은)는 ${food}를 맛있게 먹어요.`
}
};
var dog2 = {
name : '뽀삐',
eat(food){
console.log(`${this.name}(은)는 ${food}를 맛있게 먹어요.`);
}
};
1) in operator(in 연산자)
var student = {
name : '유관순',
age : 16,
test : undefined
};
console.log(student.name === undefined); //false - 존재
console.log(student.height === undefined); //true - 존재하지 않음
console.log(student.test === undefined); //true - 존재하지만 존재하지 않음으로 판단 됨
//프로퍼티 값이 undefined 일 뿐 프로퍼티는 존재하지만 존재하지 않는다고 판별 될 수 있는 문제가 있다.
// in 연산자로 판단하기
console.log("name" in student);
console.log("height" in student);
console.log("test" in student);
2) for in
var student = {
name : '유관순',
age : 16,
getInfo(){
return `${this.name}(은)는 ${this.age}세 입니다.`
}
};
console.log(student);
console.log();
console.log(student.getInfo());
for(var key in student){
console.log(`key : ${key}`); //프로퍼티 키 값
console.log(`student[key] : ${student[key]}`); //프로퍼티 키에 해당하는 값
}