티스토리 뷰
반응형
-
자바스크립트의 단순한 데이터 타입
- 숫자, 문자열 , boolean(true/false), null, undefined
- 이 들을 제외한 다른 값들은 모두 객체
- 숫자, 문자열, boolean은 메소드가 있어 유사 객체라 할 수 있지만 immutable하다
- 객체는 변형 가능한 속성들의 집합
- 숫자, 문자열 , boolean(true/false), null, undefined
-
자바스크립트의 객체 : 이름과 값이 있는 속성들을 포함하는 컨테이너
- 속성의 이름은 문자열이면 모두 가능(빈 문자열 포함)
- 속성의 값은 undefined를 제외한 자바스크립트의 모든 값이 사용될 수 있음
- class가 필요 없음(class-free)
- 다른 객체를 포함할 수가 있음
- 객체에 있는 속성들을 다른 객체에 상속하게 해주는 프로토타입(prototype) 연결 특성이 있음
01. 객체 리터럴
var empty_object = {};
var stooge = {
"first-name": "Jerome",
"last-name": "Howrad"
};
- 객체 리터럴은 매우 편리한 표기법을 제공한다
- 속성(property)
- 속성 이름은 어떤 문자열이라도 가능하다(빈 문자열 가능)
- 속성 이름의 따옴표는 유효한 이름이고 예약어가 아니면 생략할 수 있다
- 쉼표(,)는 "속성 이름":"값" 쌍들을 구분하는데 사용한다
- 속성의 값은 어떠한 표현식도 가능하다(객체를 넣어도 됨)
02. 속성값 읽기
stooge["first-name"] // "Joe"
flight.departure.IATA // "SYD"
-
객체에 속한 속성의 값은 대괄호([]) 혹은 유효한 이름이고 예약어가 아닌 경우에는 마침표(.) 표기법을 사용할 수 있다
stooge['middle-name'] // undefined var middle = stooge["middle-name"] || "(none)"; flight.equipment // undefined flight.equipment.model // throw "TypeError" flight.equipment && flight.equipment.model // undefined
-
객체에 존재하지 않는 속성을 읽으려고 하면 undefined를 반환한다
-
|| 연산자를 사용해서 기본값을 지정할 수 있다
-
undefined의 속성을 참조하려 하면 TypeError가 발생한다
- && 연산자를 사용해 방지할 수 있다
03. 속성값의 갱신
- 객체의 값은 할당에 의해 갱신한다
- 속성 이름이 이미 존재하면 값만 교체하고 존재하지 않으면 해당 속성을 객체에 추가한다
04. 참조
-
객체는 참조 방식으로 전달된다. 복사XXXXX
-
var a = { }, b = { }, c = { }; // a, b, c는 각각 다른 빈 객체를 참조 a = b = c = { } // a, b, c는 모두 같은 빈 객체를 참조
05. 프로토타입(Prototype)
-
모든 객체는 속성을 상속하는 프로토타입 객체에 연결되어 있다
-
객체 리터럴로 생성되는 모든 객체는 자바스크립트의 표준 객체인 Object의 속성인 prototype(Object.prototype) 객체에 연결된다
-
Object.create(객체) : 넘겨받은 객체를 프로토타입으로 하는 새로운 객체를 생성하는 메소드
var another_stooge = Object.ceate(stooge); another_stooge['first-name'] // "Jerome" another_stooge['first-name'] = 'Harry'; stooge['first-name'] // "Jerome"
-
프로토타입으로 연결해서 만든 객체를 변경하도 객체의 프로토타입에는 영향을 미치지 않는다
-
위임(delegation)
- 객체에 있는 특정 속성의 값을 읽으려고 할 때 해당 속성이 객체에 없는 경우 자바스크립트는 이 속성을 프로토타입 객체에서 찾으려 한다
- prototype chain의 가장 마지막에 있는 Object.prototype까지 이어진다
- prototype chain 어디에도 존재하지 않는 경우 undefined를 반환한다
-
프로토타입은 동적 관계이다(프로토타입에 새로운 속성이 추가되면 이 프로토타입으로 만든 객체에는 바로 그 속성이 나타난다)
06. 리플렉션(reflection) : 변수의 타입을 체크하고 객체의 구조를 탐색하는 과정
- typeof 연산자 : 속성의 타입 확인가능
- prototype chain 상의 속성을 배제하고 싶을 때
- 함수값 배제
- hasOwnProperty 사용 : 이 함수는 prototype chain을 바라보지 않는다
07. 열거(Enumeration)
- for in 구문을 사용해서 객체에 있는 모든 속성의 이름을 열거할 수 있음
- hasOwnProperty 메소드로 prototype chain상의 속성과 typeof로 함수를 걸러내는 방법 많이 사용
var name;
for (name in another_stooge) {
if (typeof another_stooge[name] !== 'function') {
document.writeln(name + ': ' + another_stooge[name]);
}
}
08. 삭제
- delete 연산자를 사용해서 객체의 속성 삭제 가능
- 해당 속성이 객체에 있을 경우에 삭제를 하며 prototype chain 상의 겍체들은 접근하지 않음
- 객체에서 prototype chain 상에도 존재하는 속성을 제거하면 prototype chain 상의 속성이 나타난다
another_stooge.nickname // 'Moe'
// another_stooge에서 nickname을 제거하면
// 프로토타입에 있는 nickname이 나타남
delete anoter_stooge.nickname;
anoter_stooge.nickname // 'Curly'
09. 최소한의 전역변수 사용
- 자바스크립트에서는 전역변수 사용이 매우 쉽다
- 전역변수 하나를 통으로 관리하는 전역변수 하나를 선언하고 쓰고 싶은 전역변수들을 그것의 속성으로 넣어서 관리하면 위험을 줄일 수 있다
MYAPP = {}; // 전역변수를 관리하는 컨테이너
MYAPP.stooge = { // 전역변수의 속성으로!
"first-name": "Joe",
"last-name": "Joward"
};
반응형
'study > 자바스크립트핵심가이드' 카테고리의 다른 글
Chapter02. 자바스크립트의 좋은 문법들 (0) | 2020.12.16 |
---|---|
Chapter01. 자바스크립트의 좋은 점들 (0) | 2020.12.16 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- springboot
- back merge
- 도커
- clean code
- cacheable
- Kubernetes
- 자바
- 클린코드
- linuxkit
- Spring
- docker for mac
- QuickTimePlayer
- docker pull limit
- IntelliJ
- kotlin In Action
- ImagePullBackOff
- 자바스크립트
- java
- 쿠버네티스
- 도메인주도설계
- gradle
- kotlin
- 코틀린
- 스프링부트
- ddd
- 스프링
- JavaScript
- gasmask
- docker
- k8s
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함