dolog
객체 2 본문
프로퍼티 이름의 제약사항
변수 이름엔 for, let, return 사용 X ex) let let; (X)
그러나 객체 프로퍼티엔 제약이 없다
ex)
let obj = {
for: 1,
let: 2,
return: 3
};
또한 문자열 또는 심볼형에 속하지 않은 값은 문자열로 변환된다
ex)
let obj = {
0: “test” // “0”: “test” 와 동일하다
};
하지만 역사적인 이유 때문에 특별 대우를 받는 이름이 있다 ➡️ __proto__
ex)
let obj = {};
obj.__proto__ = 5; // 원시값 5가 무시된다
console.log(obj.__proto__); // 값은 객체가 된다
이후에 프로토타입(프로토타입 상속, 매서드와 __proto__가 없는 객체) 관련해서 공부할 것
in 연산자로 프로퍼티 존재 여부 확인하기
JS의 객체는 다른 언어와 달리 존재하지 않는 프로퍼티에 접근했을 때 에러가 아닌 undefined가 반환된다
이런 특징을 응용하여 undefined와 비교하여 프로퍼티 존재 여부를 쉽게 확인할 수 있다
ex)
let obj = {};
console.log(obj.noSuchProperty === undefined) // true, 프로퍼티 존재X
undefined와 비교하는 것은 유용하긴 하지만 만약 값에 undefined가 들어가 있다면(그럴일은 거의 없지만) 프로퍼티가 존재하는건지 값에 할당되어 있는건지 판별이 어렵다
undefined와 비교하는 것 외에 in 연산자를 사용하여 존재 여부 확인
“key” in object
ex)
let obj = {
name : “john”,
age : 30
};
console.log(“age” in obj); // true
console.log(“blablabla” in obj); // false
값이 비어있거나 알수없을 때를 나타내고자 할 땐 보통 null을 사용한다
for…in 반복문 (≠ for 문) : 프로퍼티 나열
for (let key in object) {
// 각 프로퍼티 key를 이용하여 body 실행
}
이때 for (let key in object)에서 key 말고 다른 변수명을 사용해도 상관없다
ex)
let obj = {
name: “john”,
age: 30,
isAdmin: true
};
for (let key in obj) {
console.log(key); // name, age, isAdmin
console.log(obj[key]); // john, 30, true
}
객체 정렬 방식
- 특별한 방식으로 정렬
- 정수 프로퍼티(integer property)는 자동으로 정렬
- 그 외의 프로퍼티는 추가한 순서 그대로 정렬
ex) 정수 프로퍼티
let codes = {
"49": "독일",
"41": "스위스",
"44": "영국",
// ..,
"1": "미국"
};
for (let code in codes) {
console.log(code); // 1, 41, 44, 49
}
정수 프로퍼티(integer property)
- 문자열 외의 +,-number, 소수는 정수 프로퍼티가 아니다
// 함수 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)과 다르므로 정수 프로퍼티가 아닙니다.
만약 정수를 사용해야 하는 상황에서 어떤 값을 먼저 나오게 한다면 정수 앞에 “+”을 붙여서 정수 프로퍼티가 아니게 만들고 순서대로 나열하도록 하자
ex) 정수 프로퍼티 외
let user = {
name: "John",
surname: "Smith"
};
user.age = 25; // 프로퍼티를 하나 추가
// 정수 프로퍼티가 아닌 프로퍼티는 추가된 순서대로 나열된다
for (let prop in user) {
console.log( prop ); // name, surname, age
}
• 객체 1, 2 에서 다룬 객체는 순수 객체(plain object)라 불리는 일반 객체
• 일반 객체 이외 다양한 JS의 객체형(: 객체에 다양한 기능을 넣어 확장한 또 다른 객체)
ㄴ Array : 정렬된 데이터 컬렉션을 저장할 때
ㄴ Date : 날짜와 시간 정보를 저장할 때
ㄴ Error : 에러 정보를 저장할 때
ㄴ etc.
'JavaScript > 객체 : 기본' 카테고리의 다른 글
매서드와 this (0) | 2022.07.20 |
---|---|
가비지 컬렉션 2 (0) | 2022.07.20 |
가비지 컬렉션 1 (0) | 2022.07.19 |
참조에 의한 객체 복사 (0) | 2022.07.18 |
객체 1 (0) | 2022.07.15 |