소년코딩

자바스크립트에서 원시 타입을 제외한 모든 값은 객체다.

따라서 배열, 함수, 정규 표현식 모두 자바스크립트의 객체다.


1. object (객체)

'이름(key): 값(vlaue)' 형태의 프로퍼티들을 저장하는 컨테이너다.

기본(원시) 타입은 하나의 값만을 가지는데 비해 참조 타입인 객체는 여러개의 프로퍼티들을 포함할 수 잇으며, 이러한 객체의 프로퍼티들은 기본타입의 값을 포함하거나, 다른 객체를 가리킬 수 있다.

이러한 프로퍼티 성질에 따라 함수도 포함할 수 있으며 이것을 메서드라고 부른다.


2. object 생성

자바스크립트에서 명시적으로 객체를 생성하는 방법은 두 가지가 있다.

1) Object() 객체 생성자 함수

자바스크립트에서는 객체를 생성할 때 Object() 생성자 함수를 제공한다.

생성자 함수로 객체를 생성할 때는 반드시 new 연산자를 같이 써야한다.

// Object() 함수를 이용해서 blog 빈 객체 생성
var blog = new Object();

// blog 객체 프로퍼티 설정
blog.name = 'oppa';
blog.age = 25;

console.log(typeof blog);  // "object"
console.log(blog);         // {name: "oppa", age: 25}

Object() 생성자 함수를 이용하여 blog라는 빈 객체를 생성후, 여러가지 프로퍼티(name, age)를 추가하였다.

 

2) 객체 리터럴

객체 리터럴이란 객체를 생성하는 표기법으로 여러 가지 프로퍼티를 가진 객체를 쉽게 정의할 수 있도록 디자인된 표기법이다.

중괄호({}) 를 이용해서 객체를 생성하며, {} 안에 "프로퍼티 이름": "프로퍼티 값" 형태로 표기한다. (아무것도 적이 않은 경우는 빈 객체가 된다.)

프로퍼티 이름으로는 숫자, 문자열이 올 수있으며,

프로퍼티 값으로는 자바스크립트 값을 나타내는 어떤 표현식도 올수 있다. 이 값이 함수일 경우 메서드라고 부른다.

// 객체 리터럴
var blog = {
    name: 'oppa',
    age: 25
}

console.log(typeof blog);  // "object"
console.log(blog);         // {name: "oppa", age: 25}

 

객체의 인스턴스는 둘 중 어떤 방법으로 생성해도 상관없다.

객체는 새로운 값을 프로퍼티로 생성하고, 생성된 프로퍼티에 접근해서 해당 값을 읽거나 또는 원하는 값으로 프로퍼티 값을 갱신할 수 있다. 


3. 객체 프로퍼티 읽기

객체의 프로퍼티는 보통 다른 언어와 마찬가지로 '점 표기법'을 써서 접근하지만 '대괄호 표기법'을 쓸 수도 있다.

대괄호 표기법은 프로퍼티 이름을 나타내는 문자열을 대괄호 안에 쓰는 방식이다.

var blog = {
    full-name: 'oppa coding',
    name: 'oppa',
    age: 25
};

// 객체 프로퍼티 읽기
console.log(blog.name);    // 'oppa'  //    점 표기법
console.log(blog['name']); // 'oppa'  // 대괄호 표기법

(언뜻 보기에 별다른 차이점은 없다.)

 

console.log(blog.full-name);    // NaN
console.log(blog['full-name']); // 'oppa coding'

var propertyName = 'full-name';
console.log(blog[propertyName]; // 'oppa coding'

그러나 대괄호 표기법은  프로퍼티 이름에 문법 에러를 일으키거나 키워드 및 예약어에 해당하는 프로퍼티 이름에 접근할 수 있으며, 변수를 써서 프로퍼티에 접근할 수도 있다.


4. 객체 프로퍼티 갱신

프로퍼티에 접근해서 객체의 기존 프로퍼티 값을 갱신할 수 있다.

var blog = {
    name: 'oppa'
};

console.log(blog.name);    // 'oppa'

// 객체 프로퍼티 갱신
blog.name = 'coding';
console.log(blog.name);    // 'coding'

 


5. 객체 프로퍼티 동적 생성

자바스크립트에서는 객체가 생성된 후에도 동적으로 프로퍼티를 생성할 수 있다.

var blog = {
    name: 'oppa'
};
console.log(blog.age);    // undefined

// 프로퍼티 동적 생성
blog.age = 25;
console.log(blog.age);    // 25

6. for-in 문과 객체 프로퍼티 출력

for in 문을 사용하면 객체에 포함된 모든 프로퍼티에 대해 루프를 수행할 수 있다.

var blog = {
    full-name: 'oppa coding',
    name: 'oppa',
    age: 25
};

// for in 문을 이용한 객체 프로퍼티 출력
var property;
for(property in blog) {
    console.log(property, blog[property]);
}
/*
    full-name 'oppa coding'
    name 'oppa'
    age 25
*/

7. 객체 프로퍼티 삭제

자바스크립트에서는 객체의 프로퍼티를 delete 연산자를 이용해 즉시 삭제할 수 있다.

delete 연산자는 객체의 프로퍼티만 삭제할 뿐, 객체 자체를 삭제하지는 못한다.

var blog = {
    name: 'oppa'
};
console.log(blog.name);    // 'oppa'

// 객체 프로퍼티 삭제
delete blog.name;
console.log(blog.name); // undefined

// 객체 삭제 시도
delete blog;
console.log(blog);    // Object{}

 

자바스크립트

by 소년코딩

추천은 글쓴이에게 큰 도움이 됩니다.

악플보다 무서운 무플, 댓글은 블로그 운영에 큰 힘이됩니다.

댓글 로드 중…

블로그 정보

소년코딩 - 소년코딩

소년코딩, 자바스크립트, C++, 물리, 게임 코딩 이야기

최근에 게시된 이야기