dolog

객체 2 본문

JavaScript/객체 : 기본

객체 2

dokite 2022. 7. 17. 18:57

프로퍼티 이름의 제약사항

변수 이름엔 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