티스토리 뷰

반응형
  • 자바스크립트의 단순한 데이터 타입

    • 숫자, 문자열 , boolean(true/false), null, undefined
      • 이 들을 제외한 다른 값들은 모두 객체
    • 숫자, 문자열, boolean은 메소드가 있어 유사 객체라 할 수 있지만 immutable하다
      • 객체는 변형 가능한 속성들의 집합
  • 자바스크립트의 객체 : 이름과 값이 있는 속성들을 포함하는 컨테이너

    • 속성의 이름은 문자열이면 모두 가능(빈 문자열 포함)
    • 속성의 값은 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"
};
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함