자바스크립트의 객체는 자바스크립트의 나머지 데이터 타입 (원시형 타입)과 달리 다양한 데이터를 담을 수 있다.
키로 구분된 데이터 집합이나 복잡한 개체를 저장할 수 있다. 객체는 중괄호를 이용해 만들 수 있다.
중괄호 안에는 '키(key) : 값(value)' 쌍으로 구성된 프로퍼티를 여러 개 넣을 수 있는데 ,
키 에는 문자형, 값 에는 모든 자료형이 허용된다.
프로퍼티 키는 '프로퍼티 이름'이라고도 한다.
let user = new Object();
let user = {} //두 방법 모두 객체를 만들 수 있다.
리터럴과 프로퍼티
중괄호 {...}안에는 '키:쌍'으로 구성된 프로퍼티가 들어간다.
let user = {
name:"John",
age:30
};
클론 : 을 기준으로 왼쪽이 key값, 오른쪽이 value 값이다.
위의 코드를 살펴보면,
객체 user에는 프로퍼티가 2개 있는데, 첫번쨰 프로퍼티 - "name"이름과 "John"(값),
두 번쨰 프로파티 - age(이름)과 30(값)이 있다.
프로퍼티를 추가,삭제하는 방법
일단 프로퍼티를 가져오는 방법이다. 점 표기법(dot notation)을 이용하면 프로퍼티의 값을 읽을 수 있다.
alert(user.name);
alert(user.age);
프로퍼티 값에는 모든 자료형이 올 수 있다. 불린형 자료형을 객체 user에 추가해본다면,
user.isAdmin = true;
이런식으로 추가가능하다.
다음은 프로퍼티의 삭제이다. delete 연산자를 사용하면 프로퍼티를 삭제 할 수 있다.
delete user.age;
delete user.name;
delete user.isAdmin;
상수 객체는 수정될 수 있다.
const user = {
name: "John"
};
user.name = "Pete"; // (*)
alert(user.name); // Pete
위의 코드는 user의 name은 고정된 것이 아니라 Pete로 바뀐다.
const는 user = ....를 전체적으로 설정하려고 할 떄만 오류가 발생한다.
대괄호 표기법
여러 단어를 조합해 프로퍼티 키를 만든 경우, 점 표기법으로 프로퍼티 값을 읽을 수 없다.
let user = {
name: "John",
age: 30
};
let key = prompt("사용자의 어떤 정보를 얻고 싶으신가요?", "name");
// 변수로 접근
alert( user[key] ); // John (프롬프트 창에 "name"을 입력한 경우)
user["name"],user["age"] 이런식으로 프로퍼티 값을 읽을 수 있다.
프로퍼티 존재여부: 'in'연산자
자바스크립트 객체의 존재하지 않는 프로퍼티에 접근하면 undefined를 반환한다.
let user = {};
alert( user.noSuchProperty === undefined ); // true는 '프로퍼티가 존재하지 않음'을 의미합니다.
"key" in object
예시를 살펴보자
let user = { name: "John", age: 30 };
alert( "age" in user ); // user.age가 존재하므로 true가 출력됩니다.
alert( "blabla" in user ); // user.blabla는 존재하지 않기 때문에 false가 출력됩니다.
age는 user.ae로 존재하므로 true를, user.blabla는 존재하지 않으므로 undefinde를 출력한다.
for in..반복문
for..in반복문을 사용하면 객체의 모든 키를 순회할 수 있다.
<!DOCTYPE html>
<script>
"use strict";
let user = {
name:"JON",
age:30,
isAdmin:true,
}
for (let key in user){
alert(key);
alert(user[key]);
}
</script>
객체의 정렬 방식
객체의 정수 프로퍼티는 자동으로 정렬되고, 그 외에는 추가된 순서 그대로 정렬된다.
let codes = {
"49": "독일",
"41": "스위스",
"44": "영국",
// ..,
"1": "미국"
};
for(let key in codes){
alert(key);
alert(codes[key]);
}
정수 프로퍼티->
정수 프로퍼티는 변형 없이 정수에서 왔다 갔다 할 수 있는 문자열을 의미한다.
문자열 "49"는 정수로 바꾸거나 변환한 정수를 문자열로 바꿔도 변형이 없기 때문에 정수 프로퍼티고,
"-1000","+2000"는 정수 프로퍼티가 아니다.