10장. 객체 리터럴

heyj·2022년 2월 5일
0
post-thumbnail

10.1 객체란?

  • 자바스크립트는 객체(object) 기반의 프로그래밍 언어이며, 자바스크립트를 구성하는 거의 '모든 것'이 객체다.

  • 원시 타입(primitive type)은 단 하나의 값만 나타내지만 객체 타입은 다양한 타입의 값을 하나의 단위로 구성한 복합적인 자료구조(data structure)다. 원시 타입의 값은 변경 불가능한 값이지만, 객체는 변경 가능한 값이다.

  • 객체는 프로퍼티와 메서드로 구성된 집합체다. 프로퍼티와 메서드는 각각 객체의 상태를 나타내는 값, 프로퍼티를 참조하고 조작할 수 있는 동작이라 할 수 있다.

10.2 객체 리터럴에 의한 객체 생성

  • 자바스크립트는 프로토타입 기반 객체지향 언어로, 1) 객체리터럴, Object생성자 함수, 생성자 함수, Object.create 메서드, 클래스(ES6)로 객체 생성 방법을 지원한다. 이 중 가장 일반적이고 간단한 방법은 객체 리터럴을 사용하는 방법이다.
const visitor = {
  name: 'john',
  sayHello: function() {
    console.log(`Hello, Welcome ${this.name}`)
}
  
console.log(typeof visitor) // object
console.log(visitor) // {name: 'john', sayHello: f}

10.3 프로퍼티, 10.5 프로퍼티 접근

  • 객체는 프로퍼티의 집합이며, 프로퍼티는 key와 value로 구성된다.
const person = {
	name: 'john',
  	age: 20
}

//key: name, age
//value: 'john', 20

console.log(person.name) // 'john'
console.log(person['age']) // 20
console.log(person) // {name: 'john', age: 20}

// 다만, 대괄호 프로퍼티 접근 연산자는 반드시 따옴표를 이용해야 한다.
console.log(person[name]) // ReferenceError: name is not defined

10.6 프로퍼티 값 갱신, 10.7 동적 생성, 10.8 삭제

// 값 갱신
let guest = {
  name: 'angela',
}

guest.name = 'kim'
console.log(guest) // {name: 'kim'}

// 동적 생성
guest.age = 25
console.log(guest) // {name: 'kim', age: 25}

// 삭제
delete guest.name;
console.log(guest) // {age: 25}

10.9 ES6에서 추가된 기능

10.9.1 프로퍼티 축약 표현

let name = 'kim;
let nationality = 'ROK'

const tourist = { name, nationality }
console.log(tourist); // {name: 'kim', nationality: 'ROK'}

10.9.2 계산된 프로퍼티 이름

프로퍼티 키로 표현식을 사용할 경우 대괄호로 묶어야 한다.

const title = 'prop';
let i = 0;

const object = {
	[`${title}-${++i}`]: i,
    [`${title}-${++i}`]: i,
    [`${title}-${++i}`]: i
}

console.log(object) // {title-1: 1, title-2: 2, title-3: 3}

10.9.3 메서드 축약

const visitor = {
  name: 'john',
  sayHello: function() {
    console.log(`Hello, Welcome ${this.name}`)
}

const visitor = {
  name: 'john',
  sayHello() {
    console.log(`Hello, Welcome ${this.name}`)
}

//function을 생략해 쓸 수 있다.

0개의 댓글