Link Search Menu Expand Document
Object
Table of contents
  1. object = { key : value };
  2. object를 만드는 방법
    1. object의 property를 중간에 추가하거나 삭제가 가능
  3. Computed properties
    1. object 안에 있는 data에 접근하는 방법
  4. Property value shorthand
  5. Constructor function
  6. in operator
  7. for..in vs for..of
    1. for (key in obj)
    2. for (value of iterable)
  8. object를 복제/복사하는 방법
    1. 1. for…in (old way)
    2. 2. Object.assign
  9. Ref.

  • Object는 JavaScript의 데이터 타입 중 하나
  • 거의 모든 objects는 Object의 instances이다
  • Object를 이용하면 데이터를 효율적으로 관리할 수 있다.
  • object는 key와 value의 집합체

object = { key : value };

  • key : 우리가 접근할 수 있는 변수/property
  • value : 그 property가 가지고 있는 값

key : name, age / value : dowon, 27

const dowon = { name: "dowon", age: 27 };

object를 만드는 방법

  • object literal syntax

    const obj1 = {}; ⇒ { }를 이용해서 만드는 방법

  • object constructor syntax

    const obj2 = new Object(); ⇒ class를 이용해서 new를 붙여 만드는 방법

object의 property를 중간에 추가하거나 삭제가 가능

JavaScript는 dynamically typed language이다. 다시 말해, JavaScript는 동적으로 type이 runtime(프로그램이 작동할 때) 때 결정된다. 따라서 object의 property를 중간에 추가하거나 삭제하는 것이 가능하다.

“hasjob” property를 중간에 추가 및 삭제

const dowon = { name: "dowon", age: 27 };
dowon.hasJob = true;
console.log(dowon.hasJob); // true

delete dowon.hasJob;
console.log(dowon.hasJob); // false

Computed properties

object 안에 있는 data에 접근하는 방법

1. dot. 을 이용해 접근하는 방법

  • 코딩하는 그 순간 key에 해당하는 그 값을 받아오고 싶을 때 사용
console.log([dowon.name]); // dowon

2. Computed properties : 배열에서 데이터를 받아 접근하는 방법

  • 이때 key는 string type으로 지정해서 받아와야 한다
  • Computed properties는 정확하게 어떤 key가 필요한지 모를 때, runtime에서 결정될 때 사용
console.log(dowon["name"]); // dowon
console.log(dowon[name]); // undefined

printValue 함수에서 어떤 obj와 key를 받을지 모르는 경우에는 Computed properties를 이용해야 한다. console.log(obj.key); 는 key라는 property를 찾는 것이므로 적절하지 않다. ⇒ 동적으로 key를 받을 때 유용하다

function printValue(obj, key) {
  console.log(obj[key]);
}
printValue(dowon, "name"); // dowon
printValue(dowon, "age"); // 26

Property value shorthand

key와 value의 이름이 동일하다면 생략이 가능하다

const person4 = makePerson("dowon", 26);
console.log(person4);
function makePerson(name, age) {
  return {
    name: name,
    age: age,
  };
}

key와 value의 이름이 name과 age로 동일하기 때문에 생략 가능

const person4 = makePerson("dowon", 26);
console.log(person4);
function makePerson(name, age) {
  return {
    name,
    age,
  };
}

Constructor function

JavaScript에 클래스가 없었을 때는 function을 이용해서 object를 생성했다. 이처럼 다른 계산을 하지 않고 순수하게 object를 생성하는 함수의 경우 다음과 같은 규칙을 지켜야 한다.

  • 대문자로 함수의 이름을 시작해야 한다
  • return 대신 this를 사용한다
  • 함수지만 호출할 때도 class 처럼 new를 붙여서 호출해야 한다
console.log(person4);
function Person(name, age) {
  // this = {};
  this.name = name;
  this.age = age;
  // return this;
}
const person4 = new Person("dowon", 26);
// Person {name: "dowon", age: 26}

in operator

해당하는 object 안에 key가 있는지 없는지를 간단히 확인할 수 있다 ⇒ true/false로 결과를 알려준다

const dowon = { name: "dowon", age: 27 };
console.log("name" in dowon); // true
console.log("age" in dowon); // true
console.log("random" in dowon); // false
console.log(dowon.random); // undefined

for..in vs for..of

for (key in obj)

모든 key들을 받아와서 일을 처리하고 싶을 때 사용한다

dowon이 가지고 있는 key들이 블럭{ }을 돌 때마다 key라는 지역 변수에 할당된다. 따라서 console.log로 출력을 하면 dowon 안에 있는 모든 key들이 출력된다.

for (let key in dowon) {
  console.log(key);
}
// name
// age

for (value of iterable)

array에 있는 모든 값들이 value에 할당되면서 블럭{ }안에서 순차적으로 출력하거나 값을 계산할 수 있다

const array = [1, 2, 3, 4, 5];
for (let value of array) {
  console.log(value);
}
// 1, 2, 3, 4, 5

object를 복제/복사하는 방법

const user = { name: "dowon", age: "26" };
const user2 = user;
user2.name = "coder";
console.log(user); // { name: "coder", age: "26" }

1. for…in (old way)

⇒ object를 수동적으로 복제하는 방법

const user = { name: "dowon", age: "26" };
const user3 = {};
for (let key in user) {
  user3[key] = user[key];
}
console.log(user3); // { name: "dowon", age: "26" }

2. Object.assign

Object.assign(target, ...sources)

const user = { name: "dowon", age: "26" };
const user4 = {};
Object.assign(user4, user);
console.log(user4); // { name: "dowon", age: "26" }

// object를 만들면서 동시에 assign를 사용 가능
const user5 = Object.assign({}, user);
console.log(user5);

⚠️ assign은 뒤에 있는 아이일수록 앞에 같은 property가 있다면 계속 값을 덮어씌우기 때문에 유의해야 한다

mixed.color의 경우 fruit1의 color는 무시되고, fruit2의 color인 blue가 출력된다. (color라는 같은 property를 가지고 있는데, fruit2가 더 뒤에 있기 때문)

const fruit1 = { color: "red" };
const fruit2 = { color: "blue", size: "big" };
const mixed = Object.assign({}, fruit1, fruit2);
console.log(mixed.color); // blue
console.log(mixed.size); // big

Ref.


Page last modified: Feb 9 2021 at 06:02 PM.