배열의 객체를 알아보자!
객체란 무엇일까?
객체는 관련된 데이터와 함수(일반적으로 여러 데이터와 함수로 이루어지는데, 객체 안에 있을 때는 보통 프로퍼티와 메소드라고 부름)의 집합이다.
만약에 회원 주소록은 만들어본다고 가정해보자...
let userFirstName = "Steve";
let userLastName = "Lee";
let userEmail = "steve@codestates.com";
let userCity = "Seoul";
let user2FirstName = "Jason";
let user2LastName = "Jeong";
let user2Email = "jason@codestates.com";
let user2City = "Busan";
매번 이런식으로 여러개의 변수를 꼭 선언해야 할까? 만약 변수를 일일히 지정해 사용해서 주소록을 만든다면 시간도 많이 들고 비효율적이다.
그렇다면 이런식으로 배열을 써보는 것은 어떨까...?
let user = [
"Steve",
"Lee",
"steve@codestates.com"
"Seoul"
];
let user2 = [
"Jason",
"Jeong",
"jason@codestates.com"
"Busan"
];
오... 뭔가 더 축약되고 간단해보이긴 하다...
하지만 배열만 사용할 경우 문제가 생긴다. 위의 경우는 각 값이 하나의 변수로 묶여있긴 하지만, 이 경우에는 각 index가 어떤 정보를 갖고 있는지 미리 알고 있어야 한다. 또한, index로 접근할 경우 가독성도 떨어진다.
흠... 그렇다면 좀 더 좋고 효율적인 방법은 없을까?
이럴때 사용하는 것이 객체이다!
let user = {
firstName: 'Steve',
lastName: 'Lee',
email: 'steve@codestates.com',
city:'seoul'
}
객체는 키, 값(key-value pair) 쌍으로 이루어져 있다!
중괄호를 사용하고, 키 값 쌍으로 사용해서 쉼표로 구분한다.
객체를 사용하는 방법은 두 가지가 있다.
let user = {
firstName: 'Steve',
lastName: 'Lee',
email: 'steve@codestates.com',
city:'seoul'
};
user.firstName; // Steve
user.city; // Seoul
let user = {
firstName: 'Steve',
lastName: 'Lee',
email: 'steve@codestates.com',
city:'seoul'
};
user['firstName']; // Steve
user['city']; // Seoul
-------------
user[lastName] // reference error:content not defined -> 정의되지 않았다
// -> lastName을 지금 키 값으로 보는게 아니라 변수라고 인식
//lastName이라는 변수가 있으면 사용 가능!
dot/bracket notation을 이용해 값을 추가할 수도 있다!
let tweet = {
writer: "stevelee"
createdAt: "2019-09-10 12:03:33"
content: "프리코스 재밌어요!"
};
tweet["category"] = "잡담";
tweetisPublic = true;
tweet.tags = ["코드스테이츠", "프리코스"];
delete 키워드를 이용해 삭제도 가능하다!
let tweet = {
writer: "stevelee"
createdAt: "2019-09-10 12:03:33"
content: "프리코스 재밌어요!"
};
//createAt 키-값 쌍을 지운다
delete tweet.createdAt;
//tweet은 다음과 같게 된다
// { writer: "stevelee", content: "프리코스 재밌어요!" }
in 연산자를 이용해 해당 키가 있는지 확인도 가능하다!
let tweet = {
writer: "stevelee"
createdAt: "2019-09-10 12:03:33"
content: "프리코스 재밌어요!"
};
"content" in tweet; //true
"updateAt" in tweet; //false