Javascript, 객체 리터럴

자바스크립트는 원시 타입을 제외하고 모든 값이 객체

객체는 JS에서 가장 중요한 데이터 타입

객체는 객체 리터럴과 생성자(함수)로 생성할 수 있다.

[1] 객체

객체

  • 이름과 값을 한 쌍으로 묶은 데이터를 여러 개 모든 것
  • 데이터 여러 개를 하나로 모은 복합 데이터로 연관 배열 또는 사전이라고도 부른다.

<트럼프 카드를 표현하는 객체>

이름
suit“하트”← 프로퍼티
rank“A”← 프로퍼티

프로퍼티 : 객체에 포함된 데이터 하나(이름과 값의 쌍)를 가리켜 객체의 프로퍼티라고 함.

[2] 객체 리터럴로 객체 생성하기

var card = { suit: "하트", rank: "A" };

{…} 부분객체 리터럴

위 코드는 객체 리터럴을 변수 card에 대입하고 있다.

프로퍼티 이름 : 프로퍼티 값

{ } 안에 프로퍼티는 쉼표(,)로 구분

  • 프로퍼티 이름 – 모든 식별자와 문자열 리터럴(빈 문자열도 사용 가능)을 사용할 수 있다. 즉, 앞 코드에 있는 프로퍼티 이름은 문자열로 바꾸어 작성할 수 있다.
  • 프로퍼티 값 – 모든 데이터 타입의 값과 표현식을 대입 가능
var card = { "suit": "하트", "rank": "A" };

변수에 대입된 객체 안의 프로퍼티 값을 읽거나 쓸 때는 마침표(.) 연산자 또는 대괄호([]) 연산자를 사용

card.suit     // → 하트
card["rank"]     // → A

마침표로 프로퍼티를 읽거나 쓸 때는 프로퍼티 이름 즉, 식별자만 사용할 수 있다.

대괄호로 프로퍼티를 읽거나 쓸 때는 프로퍼티 이름 또는 문자열을 반환하는 표현식을 사용할 수 있다.

객체에 없는 프로퍼티를 읽으려고 시도하면 undefined를 반환

(선언되지 않은 변수를 읽으려고 시도하면 참조 오류가 발생하는 것과 대조적)

card.color     // → undefined

객체 리터럴 안에 어떠한 프로퍼티도 작성하지 않으면 빈 객체가 생성

var obj = {};
console.log(obj)     // → Object{ }

[3] 프로퍼티의 추가와 삭제

프로퍼티 추가 : 없는 프로퍼티 이름에 값을 대입하면 새로운 프로퍼티가 추가된다.

var card = { suit: "하트", rank: "A" };
card.value = 14;
console.log(card);     // → Object { suit: "하트", rank: "A", value: 14 }

프로퍼티 삭제 : delete 연산자 사용

var card = { suit: "하트", rank: "A", value: 14 };
delete card.rank;
console.log(card);     // → Object { suit: "하트", value: 14 }

[4] in 연산자로 프로퍼티가 있는지 확인하기

in 연산자를 사용하면 객체에 특정 프로퍼티가 있는지 확인할 수 있다.

var card = { suit: "하트", rank: "A" };
console.log("suit" in card);     // → true
console.log("color" in card);     // → false
console.log("toString" in card);     // → true

in 연산자가 조사하는 대상이 그 객체가 가진 프로퍼티와 그 객체가 상속받은 모든 프로퍼티라는점에 주의한다.

card 객체 안에 toString 프로퍼티는 없지만, 결과를 보면 toString 프로퍼티가 card에 있다고 나온다. 이는 card가 Object 객체를 상속받았기 때문이다.

[5] 객체 리터럴 예제

<좌표평면의 점을 표현하는 객체>

var p = { x: 1.0, y: 2.5};

<원을 표현하는 객체>

var circle = {
    center: { x: 1.0, y: 2.0 },     // 원의 중심을 표현하는 객체
    radius: 2.5                     // 원의 반지름
}

객체의 프로퍼티 값으로 객체를 대입할 수 있다.

circle.center.x     // → 1.0

<회원 정보를 표현하는 객체>

var person = {
    name: "이정규",     // 회원 이름
    age: 18,           // 나이
    sex: "남",         // 성별
    married: false     // 결혼 여부를 표현하는 논리값
}

[6] 메서드

프로퍼티에 저장된 값의 타입이 함수면 그 프로퍼티를 메서드(4.2 [13])라고 부른다.

[7] 객체는 참조 타입

객체 타입의 값을 변수에 대입하면 그 변수에는 객체의 참조(메모리에서의 위치 정보)가 저장된다.

이때의 변수 상태를 가리켜 그 객체는 ‘참조하고 있다‘ 라고 한다.

var card = { suit: "하트", rank: "A" };

변수 card에 트럼프 카드 객체의 참조가 저장되어 있다.

var card = { suit: "하트", rank: "A" };
var a = card;
console.log(a.suit); // → 하트
a.suit = "스페이드";
console.log(a.suit); // → 스페이드
console.log(card.suit); // → 스페이드

< 참고문헌 >
🔹주 참고문헌 : 모던 자바스크립트 입문 – 이소 히로시 지음, 서재원 옮김
🔹MDN Web Docs

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


error: 컨텐츠가 보호되고 있습니다.
위로 스크롤