자바스크립트 객체
- 자바스크립트의 기본 타입(data type)
- key(속성) + value(속성값) 한쌍으로 값을 저장할 수 있는 구조
==> 이름(name)과 값(value)으로 구성된 프로퍼티(property)의 정렬되지 않은 집합
- 여러 속성을 하나의 변수에 저장할 수 있도록 해주는 데이터타입
- 프로퍼티(속성)의 값으로 함수가 올 수도 있는데, 이러한 프로퍼티(속성)를 메소드(method)라 칭함
- number, string, boolean, undefined 타입 제외한 모든 타입은 객체
- but.. 숫자, 문자열, 불리언과 같은 원시 타입은 값이 정해진 객체로 취급되어, 객체로서의 특징도 함께 가짐
- 객체는 중괄호{}를 이용하여 생성,
중괄호 내에 객체에 필요로 하는 속성(property)들을 정의함(속성:속성값)
- 속성값으로는 모든 자료형의 값을 담을 수 있음
=> 자바스크립트에서의 배열: 자바의 ArrayList와 유사
=> 자바스크립트에서의 객체: 자바의 hashMap과 유사
[표현법]
var 변수명 (==객체명) = {
속성명: 속성값,
속성명: 속성값,
속성명: 속성값,
....
}
객체의 프로퍼티와 메소드
프로퍼티(property / 속성)
- cat.name = "고순"
- cat.type = "koreaShortHair"
- cat.age = 19
메소드(method)
- cat.eat()
- cat.sleep()
- cat.play()
객체의 프로퍼티 참조 (객체 속성에 접근하는 법)
방법1: 참조연산자(.)이용:
객체이름.프로퍼티이름
방법2: 대괄호를 이용하는 방법:
객체이름["프로퍼티이름"]
<button onclick="test1();">실행확인</button>
<div id="area1" class="area big"></div>
<script>
function test1(){
//배열
var arr = ['크루아상', 2000, '식사',['밀가루','버터'],'뚜레주르'];
// 객체
var product = {
pName: '크루아상',
pPrice: 2000,
kind: '식사',
'material':['밀가루','버터'],
// 홑따옴표 생략가능
// 홑따옴표가 필요한 경우: 공백, 속성명에 특문등이 있을 경우
company: '뚜레주르'
}
//(5) ['크루아상', 2000, '식사', Array(2), '뚜레주르']
//{pName: '크루아상', pPrice: 2000, kind: '식사', material: Array(2), company: '뚜레주르'}
// 배열과 용도는 같으나, 의미를 담은 속성을 지어줄 수 있다는 차이점
// 순서가 고정되어 있지 않다 (순서에 의미가 있는 것이 아니고, 속성명에 의미가 있으므로!)
console.log(arr);
console.log(product);
console.log(typeof(product));
document.getElementById('area1').innerHTML += '배열: '+arr +'<br>';
document.getElementById('area1').innerHTML += '객체: '+product.pName+'<br>'
//[object Object]
// 객체 내용을 출력하려면 객체내부로 들어가야함
// 해당 객체 내부의 각 속성에 접근하는 방법:
// 방법1: 참조연산자(.)이용 -> 객체명.속성명 <br>'
area1.innerHTML += ' 1.참조연산자(.)이용 -> 객체명.속성명 <br>';
area1.innerHTML += ' pName: '+product.pName+ '<br>';
area1.innerHTML += ' pPrice: '+product.pPrice+ '<br>';
area1.innerHTML += ' kind: '+product.kind+ '<br>';
area1.innerHTML += ' material: '+product.material+ '<br>';
area1.innerHTML += ' material[0]: '+product.material[0]+ '<br>';
area1.innerHTML += ' material[1]: '+product.material[1]+ '<br>';
area1.innerHTML += ' company: '+product.company+ '<br>';
// 방법2: 대괄호를 이용하는 방법:
// 꼭 이렇게 써야하는 경우가 있으므로 알아둘 것
area1.innerHTML += ' 2. 객체명[속성명]으로 접근하기 <br>'
area1.innerHTML += ' product[pName]: '+product['pName']+ '<br>';
area1.innerHTML += ' product[pPrice]: '+product['pPrice']+ '<br>';
area1.innerHTML += ' product[kind]: '+product['kind']+ '<br>';
area1.innerHTML += ' material: '+product['material']+ '<br>';
area1.innerHTML += ' material[0]: '+product['material'][0]+ '<br>' ;
// 인덱스 왜 바깥에써?
area1.innerHTML += ' material[1]: '+product['material'][1]+ '<br>';
area1.innerHTML += ' company: '+product['company']+ '<br>';
};
<script>
function test2(){
var user = {
'user name': '홍길동',
'age !!':20,
};
var area2 = document.getElementById('area2');
area2.innerHTML += 'userName: '+user['user name'] +'<br>';
area2.innerHTML += 'age!!: '+user['age !!'];
// 이러한 경우 (.)을 이용하는 방법 사용 불가!
}
</script>
* 객체에서의 반복문 (for-in문: var key in 객체)
인덱스 개념이 없으므로 단순for문 사용불가
---> for in문 사용!
객체가 가진 모든 속성들에 순차접근시 사용가능
<button onclick="test3();">실행확인</button>
<div id="area3" class="area small"></div>
<script>
function test3(){
var area3 =document.getElementById('area3');
var arr = ['마라탕', '마라샹궈','양꼬치', '칭따오'];
for (var i in arr){
area3.innerHTML += arr[i]+'<br>';
}
// in키워드 뒤 배열 제시시 반복문이 돌때마다 0부터 마지막 인덱스가 var i 에 담김
var game = {
title: '스타크래프트',
price: 15000,
language: '한국어',
supportOS : ['window64', 'MAC'],
service :true
}
for (var key in game){
// 속성명이 key로 들어감
// area3.innerHTML += key+':'+game.key+'<br>';
// game객체로 가서 key라는 속성명을 찾는데 없다!!
//in 뒤에 객체 제시시, 반복문이 돌 때마다 해당 객체의 속성명들이 var key(변수명)에 담김
// 따라서, 사용 불가
area3.innerHTML += key+':'+game[key]+'<br>';
// 객체로 반복문 돌릴때에도 직접접근연산자로 객체의 속성명 접근 불가
}
}
</script>
References
출처: https://inpa.tistory.com/entry/JS-📚-자바스크립트-in-연산자 [👨💻 Dev Scroll:티스토리
'JavaScript' 카테고리의 다른 글
[jQuery] jQuery선택자 (0) | 2022.11.01 |
---|---|
[JavaScript] 객체2: 객체의 메소드 참조/ 객체내 속성호출(this) in, with / toString메소드 (1) | 2022.10.31 |
[JavaScript] 함수 (0) | 2022.10.25 |
[JavaScript] 배열 (0) | 2022.10.25 |
[JavaScript] BOM/ DOM (window객체, document객체) (0) | 2022.10.25 |