자바스크립트엔 여덟 가지 자료형이 있습니다.
이 중 일곱 개는 오직 하나의 데이터(문자열, 숫자 등)만 담을 수 있어 '원시형(primitive type)'이라 부릅니다.
<script>
let user = {}; // '객체 리터럴' 문법
let user = new Object(); // '객체 생성자' 문법
</script>
<script>
let user = { // 객체
name: "John", // 키: "name", 값: "John" // 1번 프로퍼티
age: 30 // 키: "age", 값: 30 // 2번 프로퍼티
};
</script>
<script>
let user = {
name: "John",
age: 30,
"likes birds": true
};
</script>
likes birds처럼 띄어쓰기가 있거나, 여러 단어를 조합해 프로퍼티 이름을 만든 경우엔 프로퍼티 이름을 따옴표로 묶어줘야 합니다.
프로퍼티 값을 읽는 방법
<script>
// 프로퍼티 값 얻기
alert( user.name ); // John
alert( user.age ); // 30
</script>
불린형 프로퍼티를 추가하는 방법
<script>
user.isAdmin = true; // user 객체에 key: isAdmin, value: true을 추가
</script>
프로퍼티를 삭제하는 방법
<script>
delete user.age; // user 객체의 age 키를 삭제
</script>
상수(const) 객체는 수정될 수 있습니다.
<script> const user = { name: "John" }; user.name = "Pete"; // (*) alert(user.name); // Pete로 수정이 되었습니다 </script>
- const는 user의 값을 고정하지만, 그 내용은 고정하지 않습니다.
- const는 user=...를 전체적으로 설정하려고 할 때만 오류가 발생합니다.
- 프로퍼티(user.name)은 수정됩니다.
여러 단어를 조합해 프로퍼티 키를 만든 경우엔, 점 표기법을 사용해 프로퍼티 값을 읽을 수 없습니다.
<script>
// 문법 에러가 발생합니다.
user.likes birds = true
</script>
'점’은 키가 '유효한 변수 식별자’인 경우에만 사용할 수 있습니다.
- 공백이 없어야 합니다.
- 숫자로 시작하지 않아야 합니다.
- $와 _를 제외한 특수 문자가 없어야 합니다.
대괄호 표기법(square bracket notation)'을 사용하면 키에 어떤 문자열이 있던지 상관없이 동작합니다.
<script>
let user = {};
// set
user["likes birds"] = true;
// get
alert(user["likes birds"]); // true
// delete
delete user["likes birds"];
</script>
모든 표현식의 평가 결과를 프로퍼티 키로 사용할 수 있습니다.
<script>
let user = {}; // user는 객체
let value = "likes birds"; // value는 likes birds
// ["likes birds"] 대신 변수 이름[value]를 사용해도 됩니다.
user[value] = true; // 객체 user에 변수 value(likes birds)를 키로 사용했습니다.
</script>
예시: ( 점 표기법으론 불가능합니다.)
<script>
let user = {
name: "John",
age: 30
};
let value = prompt("사용자의 어떤 정보를 얻고 싶으신가요?", "name");
// 변수로 접근
alert( user[value] ); // John (프롬프트 창에 "name"을 입력한 경우, age는 30 출력)
// value를 key로 사용했습니다.
</script>
객체를 만들 때 객체 리터럴 안의 프로퍼티 키가 대괄호로 둘러싸여 있는 경우
계산된 프로퍼티(computed property) 라고 부릅니다.
<script>
let fruit = prompt("어떤 과일을 구매하시겠습니까?");
let bag = {
[fruit]: 5, // 변수 fruit에서 프로퍼티 이름을 사용자가 입력한 값으로 받아 옵니다.
};
alert( bag.apple ); // 사용자가 "apple"을 입력했다면, 5가 출력됩니다.
</script>
<script>
let fruit = prompt("어떤 과일을 구매하시겠습니까?");
let bag = {};
// 변수 fruit을 사용해 프로퍼티 이름을 만들었습니다.
bag[fruit] = 5;
/// 결과값
alert(bag); // { apple: 5 }
alert(bag.fruit); // undefined
alert(bag[fruit]); // 5
</script>
대괄호 안에는 복잡한 표현식이 올 수도 있습니다.
<script>
let fruit = 'apple';
let bag = {
[fruit + 'Computers']: 5 // bag.appleComputers = 5
};
</script>
<script>
function makeUser(name, age) {
return {
name: name, // *
age: age, // *
};
}
let user = makeUser("John", 30);
alert(user.name); // John
</script>
<script>
function makeUser(name, age) {
return {
name, // name: name 과 같음
age, // age: age 와 같음
};
}
</script>
변수 이름엔 ‘for’, ‘let’, ‘return’ 같은 예약어를 사용하면 안됩니다.
예약어: 이미 문법적인 용도로 사용되고 있기 때문에 식별자로 사용할 수 없는 단어들.
객체 프로퍼티엔 이런 제약이 없습니다.
<script>
let obj = {
0: "test" // "0": "test"와 동일합니다.
};
// 숫자 0은 문자열 "0"으로 변환되기 때문에 두 얼럿 창은 같은 프로퍼티에 접근합니다,
alert( obj["0"] ); // test
alert( obj[0] ); // test (동일한 프로퍼티)
</script>
⚠️in 왼쪽엔 반드시 프로퍼티 이름이 와야 합니다. 프로퍼티 이름은 보통 따옴표로 감싼 문자열입니다.
따옴표를 감싸지 않으면 제대로 동작하지 않습니다.
문법:
<script>
"key" in object // object.key 가 존재하나요?
</script>
예시:
<script>
let user = { name: "John", age: 30 };
alert( "age" in user ); // user.age가 존재하므로 true가 출력됩니다.
alert( "blabla" in user ); // user.blabla는 존재하지 않기 때문에 false가 출력됩니다.
</script>
문법:
<script>
for (key in object) {
// 각 프로퍼티 키(key)를 이용하여 본문(body)을 실행합니다.
}
</script>
예시:
<script>
let user = {
name: "John",
age: 30,
isAdmin: true
};
for (let byeonsu in user) { //for문처럼 반복 변수(looping variable)를 선언함(let byeonsu)
// 키
alert( byeonsu ); // name, age, isAdmin
// 키에 해당하는 값
alert( user[byeonsu] ); // John, 30, true
}
</script>
<script>
let codes = {
"49": "독일",
"41": "스위스",
"44": "영국",
// ..,
"1": "미국"
};
for (let code in codes) {
alert(code); // 1, 41, 44, 49 순으로 프로퍼티가 자동 정렬됨. key가 정수임
}
</script>
정수 프로퍼티(integer property)란?
정수: 자연수, 자연수의 음수, 0을 통칭하는 말문자열 "49"는 정수로 변환하거나 변환한 정수를 다시 문자열로 바꿔도 변형이 없기 때문에 정수 프로퍼티입니다. '+49’와 '1.2’는 정수 프로퍼티가 아닙니다. <script> // 함수 Math.trunc는 소수점 아래를 버리고 숫자의 정수부만 반환합니다. alert( String(Math.trunc(Number("49"))) ); // '49'가 출력됩니다. 기존에 입력한 값과 같으므로 정수 프로퍼티입니다. alert( String(Math.trunc(Number("+49"))) ); // '49'가 출력됩니다. 기존에 입력한 값(+49)과 다르므로 정수 프로퍼티가 아닙니다. alert( String(Math.trunc(Number("1.2"))) ); // '1'이 출력됩니다. 기존에 입력한 값(1.2)과 다르므로 정수 프로퍼티가 아닙니다. </script>
작성 순서대로 출력 하려면 키가 정수로 취급되지 않도록 작성하면 됩니다. 각 키 앞에 "+"를 붙여봅시다.
<script>
let codes = {
"+49": "독일",
"+41": "스위스",
"+44": "영국",
// ..,
"+1": "미국"
};
for (let code in codes) {
alert( +code ); // 49, 41, 44, 1
}
</script>
자바스크립트에는 일반 객체 이외에도 다양한 종류의 객체가 있습니다.
이것들은 객체형에 속합니다.
Array – 정렬된 데이터 컬렉션을 저장할 때 쓰임
Date – 날짜와 시간 정보를 저장할 때 쓰임
Error – 에러 정보를 저장할 때 쓰임
기타 등등