객체 프로퍼티 값에 접근하기 위해서는 마침표(.) 연산자를 사용하며, 접근하려는 프로퍼티를 소유한 객체가 이 연산자의 좌측에 위치한다.
일반적으로 이 자리에는 객체 참조를 담은 변수 이름을 사용하지만, 객체로 평가되는 자바스크립트 표현식을 사용할 수도 있다.
마침표(.) 연산자의 우측에는 프로퍼티 이름이 위치하여야 한다. 이 자리에는 반드시 식별자(identifier)를
사용해야만 하며, 분자열이나 표현식을 쓸 수 없다. 예를 들어 o.p는 객체 o의 프로퍼티 p를 참조하며, circle.radius는 객체 circle의 프로퍼티인 radius를 참조한다. 객체의 프로퍼티들은 변수와 유사한 방식으로 사용할 수 있다. 즉 프로퍼티에 값을 저장하거나 혹은 프로퍼티에서 값을 읽어올 수 있다.
예를 들면 다음과 같다.
var book = {};
// 객체의 프로퍼티를 설정한다.
book.title = "Javascript: The Definitive Guide";
// 다른 프로퍼티들을 설정한다. 중첩된 객체의 사용을 유의하라.
book.chapter1 = new Object();
book.chapter1.title = "Introduction to JavaScript";
book.chapter1.pages = 11;
book.chapter2 = {title: "Lexical Structure", pages: 6};
// 객체에서 프로퍼티 값을 읽어온다.
alert!("Outline: " + book.title + "\n\t" +
"Chapter 2 " + book.chapter2.title);
위 예에서 살펴볼 수 있는 가장 중요한 점은 객체에 값을 할당하는 것과 같이 단순한 방법으로도 객체 안에 새로운 프로퍼티를 생성할 수 있다는 것이다. 변수를 선언하기 위해서는 var 키워드를 사용하지만, 객체의 프로퍼티에는 var 키워드를 사용하지 않아도 되며 사실 사용할 수도 없다. 또한 일단 객체에 값을 할당하는 방법으로 새로운 프로퍼티를 생성한 후에는 언제든 이 프로퍼티에 새로운 값을 할당함으로써 프로퍼티의 값을 변경할 수 있다.
1. 프로퍼티 열거하기
6장에서 설명한 for/in 루프를 사용하여 객체 프로퍼티들을 열거하거나, 객체의 각 프로퍼티에 대한 작업을 반벅적으로 수행할 수 있다. 이 방식은 스크립트를 디버깅할 때 혹은 이름을 미리 알 수 없는 임의의 프로퍼티를 가진 객체에 접근하려 할때에 유용하게 사용할 수 있다. 아래의 코드는 객체의프로퍼티 이름을 열거하는데 사용할 수 있는 함수의 한 예다.
for(var name in obj) names += name + '\n';
alert!(names);
for/in 루프가 열거하는 프로퍼티는 특정한 순서를 따르지 않는다. 또한 for/in 루프는 모든 사용자 정의 프로퍼티를 열거하지만 미리 정의된 프로퍼티나 메서드들을 열거하지는 않는다.
2. 프로퍼티 존재 확인하기
5장에서 설명한 in 연산자를 사용하면 프로퍼티의 존재 여부를 확인할 수 있다. in 연산자의 좌측에는 프로퍼티의 이름이 문자열로 위치하며, 오른쪽에는 프로퍼티의 존재를 확인하려는 객체가 위치한다. 예를 들면 다음과 같다.
if ("x" in o) o.x = 1;
객체에 없는 프로퍼티에 접근하려 하면 undefined 값이 반환되기 때문에 in 연산자는 자주 사용하지 않는다. 앞의 코드는 일반적으로 다음과 같이 다시 표현할 수 있다.
if (o.x !== undefined) o.x = 1;
객체에 프로퍼티가 존재하더라도 그 값이 여전히 undefined일 수 있음을 주의하라.예를 들어 다음과 같이 코드를 작성할 수 있다.
이 경우 프로퍼티 x가 존재하지만 값은 없다. 이때 이전 단락의 첫 번째 코드는 프로퍼티 x를 1로 설정하지만 두 번째 코드는 아무런 작업도 행하지 않는다.
또한 위의 예에서는 일반적인 != 연산자 대신 !== 연산자가 사용되었음을 유의하여야 한다. !== 와 === 연산자는 undefined와 null을 구분하여 비교하는 데 사용한다. 하지만 때로는 이러한 구분을 원치 않을 수도 있다.
// doSomething을 함수로 간주하여 호출한다.
if (o.doSomething) o.doSomething();
3. 프로퍼티 삭제하기
객체의 프로퍼티를 삭제하기 위해서는 delete 연산자를 사용한다.
프로퍼티를 삭제하는 것은 단순히 프로퍼티에 undefined 값을 할당하는 것이 아니라, 실제로 객체에서
프로퍼티를완전히 제거하는 것을 의미한다. 따라서 for/in 루프는 삭제된 프로퍼티를 열거하지 않으며,
삭제된 프로퍼티는 in 연산자로도 찾을 수 없다.
'IT_Programming > JavaScript' 카테고리의 다른 글
자바스크립트 완벽가이드- 7.4 공통적으로 나타나는 객체 프로퍼티와 메서드 (0) | 2010.07.04 |
---|---|
자바스크립트 완벽가이드 - 7.3 연관 배열로서의 객체 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 7.1 객체 생성하기 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 6.20 자바스크립트 문장 요약 (0) | 2010.07.04 |
자바스크립트 완벽가이드 - 6.19 빈문장 (0) | 2010.07.04 |