[TIL] 210905

Lee SyongΒ·2021λ…„ 9μ›” 5일
0

TIL

λͺ©λ‘ 보기
18/204
post-thumbnail

πŸ“ 였늘 ν•œ 것

  1. 속성 μ ‘κ·Όμž / for in 반볡문 / for of 반볡문 / λ©”μ„œλ“œ / λ°°μ—΄κ³Ό ν•¨μˆ˜ / property value shorthand / in μ—°μ‚°μž / 객체 λ³΅μ œν•˜κΈ° - Object.assign()

  2. μžλ°”μŠ€ν¬λ¦½νŠΈ κ°•μ˜ μˆ˜κ°• (object)


πŸ“– ν•™μŠ΅ 자료

  1. λ“œλ¦Όμ½”λ”© 유튜브 'μžλ°”μŠ€ν¬λ¦½νŠΈ' κ°•μ˜ 7편

  2. λ…Έλ§ˆλ“œ 코더 유튜브 '바닐라 μžλ°”μŠ€ν¬λ¦½νŠΈ' κ°•μ˜ 1-10(object)
    β†’ λ°°μ—΄ μ•ˆμ— objectλ₯Ό, object μ•ˆμ— 배열을 넣을 수 μžˆλ‹€

  3. 사전 ν•™μŠ΅ κ°€μ΄λ“œ STEP 2 Object


πŸ“š 배운 것

object(객체)


  • μš°λ¦¬κ°€ μ ‘κ·Όν•  수 μžˆλŠ” λ³€μˆ˜, 즉 속성과 κ·Έ κ°’μ˜ 집합체

    object = { key : value, ... };

  • μ›μ‹œ νƒ€μž… vs object(객체)

    • μ›μ‹œ νƒ€μž… : λ³€μˆ˜ ν•˜λ‚˜λ‹Ή ν•˜λ‚˜μ˜ 값밖에 담지 λͺ»ν•¨
      ex) const person = 'sam'

    • object(객체) : μ—¬λŸ¬ 개의 값을 담을 수 있음
      ex) const person = {...}

  • 객체 생성 방법

    • 객체 λ¦¬ν„°λŸ΄ 문법 β†’ const obj = {};
    • 객체 μƒμ„±μž 문법 β†’ const obj = new Object();

1) 속성 μ ‘κ·Όμž

  • 객체에 μ €μž₯된 속성 값을 μˆ˜μ •ν•˜κ±°λ‚˜ κ°€μ Έμ˜€κ³ μž ν•  λ•Œ μ‚¬μš©

  • μ’…λ₯˜

    • 점(.) ν‘œκΈ°λ²• : 객체 이름.속성 이름

    • λŒ€κ΄„ν˜Έ([ ]) ν‘œκΈ°λ²• : 객체 이름['속성 이름']

const niceMan = {
  name : 'thunder',
  age : 15,
  'μ·¨λ―Έ' : 'baseball',
  'μ£Όμ†Œ' : 'λŒ€ν•œλ―Όκ΅­'
  // '객체 λ¦¬ν„°λŸ΄ λ‚΄'의 속성 이름에 'μ‹λ³„μžμ— ν—ˆμš©λ˜μ§€ μ•Šμ€ 문자'κ°€ λ“€μ–΄κ°„ 경우
  // λ°˜λ“œμ‹œ λ”°μ˜΄ν‘œ('')λ₯Ό μ¨μ€˜μ•Ό ν•œλ‹€
};

// 객체에 μ €μž₯된 속성 κ°’ μˆ˜μ •ν•˜κΈ°
niceMan.name = 'Muse';
niceMan['age'] = 20;
niceMan.μ·¨λ―Έ = 'swimming';
niceMan['μ£Όμ†Œ'] = 'λ―Έκ΅­';

// 객체에 μ €μž₯된 속성 κ°’ κ°€μ Έμ˜€κΈ°
console.log(niceMan['name']); // Muse
console.log(niceMan.age); // 20
console.log(niceMan['μ·¨λ―Έ']); // swimming
console.log(niceMan.μ£Όμ†Œ); // λ―Έκ΅­
  • computed properties ❗

    • μœ„λŠ” 이해λ₯Ό μœ„ν•œ μ˜ˆμ‹œμΌ 뿐, μ‹€μ œ μ½”λ”©ν•  λ•ŒλŠ” 보톡 점 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•œλ‹€.

    • λŒ€κ΄„ν˜Έ ν‘œκΈ°λ²•μ€ μ½”λ”© λ‹Ήμ‹œμ—λŠ” μ–΄λ–€ keyκ°€ ν•„μš”ν• μ§€ μ •ν™•ν•˜κ²Œ λͺ¨λ₯΄κ³ , keyκ°€ runtime에 결정될 λ•Œ μ‚¬μš©ν•œλ‹€.

    • 이λ₯Ό 톡해 μ‚¬μš©μžκ°€ μž…λ ₯ν•˜λŠ” λ‚΄μš© λ“± μ‹€μ‹œκ°„μœΌλ‘œ μ›ν•˜λŠ” key(속성)의 이름을 λ°›μ•„μ˜¬ 수 μžˆλ‹€. λ™μ μœΌλ‘œ key에 κ΄€λ ¨λœ valueλ₯Ό 받아와야 ν•  λ•Œ μœ μš©ν•˜κ²Œ 쓰인닀.

const syong = {
  name = 'leesyong',
  age = 10
}

// object와 keyλ₯Ό λ°›μ•„μ„œ κ·Έ key에 μƒμ‘ν•˜λŠ” valueλ₯Ό 좜λ ₯ν•˜λŠ” ν•¨μˆ˜
function printValue(obj, key) {
  console.log(obj[key]); // obj.key 라고 μ“°λ©΄ undefined 값이 λœ¬λ‹€
}

printValue(syong, 'name'); // leesyong
printValue(syong, 'age'); // 10
// keyλŠ” 항상 string이어야 ν•œλ‹€ ❗ 즉, λ”°μ˜΄ν‘œ('')λ₯Ό λΆ™μ—¬ 써야 ν•œλ‹€ ❗

2) 객체의 속성 μ‚­μ œν•˜κΈ°

  • delete 객체 이름. 속성 이름;

  • delete 객체 이름['속성 이름'];

const vanilla = {
  taste : 'good',
  color : 'green',
  from : 'Mexico'
};

console.log(vanilla); // {taste : 'good', color: 'green', from: 'Mexico'}

delete vanilla.taste;
delete vanilla['color'];

console.log(vanilla); // {from : 'Mexico'}

3) for in / for of


(1) for in 반볡문

  • ν•΄λ‹Ή 객체의 λͺ¨λ“  μ—΄κ±°ν•  수 μžˆλŠ” 속성에 λŒ€ν•΄ λ°˜λ³΅ν•œλ‹€

  • λ°°μ—΄μ˜ 경우, λͺ¨λ“  μš”μ†Œμ˜ indexλ₯Ό 좜λ ₯ν•œλ‹€

μ‚¬μš© 방법

for (λ³€μˆ˜ in 객체) {

  // 반볡적으둜 μ‹€ν–‰ν•˜κ³ μž ν•˜λŠ” μ‹€ν–‰λ¬Έ;

}

예제 뢄석

// sampleμ΄λž€ 객체의 속성과 속성값
const sample = {
  name : syong,
  age : 13,
  gender : F
}

// λ£¨ν”„λ§ˆλ‹€ 객체의 μ—΄κ±°ν•  수 μžˆλŠ” μ†μ„±λ“€μ˜ [이름]을 μ§€μ •λœ λ³€μˆ˜μ— λŒ€μž…
for (let prop in sample) { 
  console.log(prop); // name age gender
  console.log(sample[prop]);
  // syong 13 F β†’ λŒ€κ΄„ν˜Έλ₯Ό μ‚¬μš©ν•΄ 객체의 속성 값에 μ ‘κ·Ό κ°€λŠ₯
}
μ΅œμ’… 좜λ ₯ κ°’

name
syong
age
13
gender
F

(2) for of 반볡문

  • λ°˜λ³΅ν•  수 μžˆλŠ” 객체(Array, Map, Set, String, TypedArray, arguments λ“±)에 λŒ€ν•΄ λ°˜λ³΅ν•œλ‹€

  • λ°°μ—΄μ˜ 경우, index만큼 λ°˜λ³΅ν•˜μ—¬ μš”μ†Œλ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•œλ‹€

μ‚¬μš© 방법

for (λ³€μˆ˜ of 객체) {

  // 반볡적으둜 μ‹€ν–‰ν•˜κ³ μž ν•˜λŠ” μ‹€ν–‰λ¬Έ;

}

예제 뢄석 1

// sampleμ΄λž€ 객체의 속성과 속성값
const sample = {
  name : syong,
  age : 13,
  gender : F
}

for (let state of sample) {
  console.log(state);
}
// 'sample is not iterable'μ΄λΌλŠ” errorκ°€ λœ¬λ‹€

예제 뢄석 2 (λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜ ν•™μŠ΅ λ…ΈνŠΈ μ°Έκ³ )

// λ£¨ν”„λ§ˆλ‹€ λ°˜λ³΅ν•  수 μžˆλŠ” 객체의 [κ°’]을 μ§€μ •λœ λ³€μˆ˜μ— λŒ€μž…
function printALL(...args) {
  for (const arg of args) {
    console.log(arg);
  }
}

printALL('my', 'name', 'is', 'syong');
μ΅œμ’… 좜λ ₯ κ°’

my
name
is
syong

예제 뢄석 3 (λ“œλ¦Όμ½”λ”© 유튜브 'μžλ°”μŠ€ν¬λ¦½νŠΈ' κ°•μ˜ 7편 14λΆ„~ μ°Έκ³ )

const array = [1, 2, 4, 5];
for (let i = 0; i < array.length; i++) {
  console.log(array[i]);
}

μœ„ μ•„λž˜λŠ” 좜λ ₯λ˜λŠ” 값이 κ°™λ‹€

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

4) λ©”μ„œλ“œ

  • 객체의 ν”„λ‘œνΌν‹° κ°’μœΌλ‘œ μ§€μ •λ˜λŠ” ν•¨μˆ˜

ν‘œκΈ°λ²• 1

const study = {
  book: function () {
    return 'I love you';
  }
};

console.log(study.book()); // I love you

ν‘œκΈ°λ²• 2

const play = {
  book () {
    return 'I love you';
  }
};

console.log(play.book()); // I love you

μ΄λ•Œ book() ν•¨μˆ˜λŠ” λ©”μ„œλ“œ(method)이닀


5) λ°°μ—΄κ³Ό ν•¨μˆ˜

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λ°°μ—΄κ³Ό ν•¨μˆ˜λ„ 객체의 범주에 ν¬ν•¨λœλ‹€

  • λ°°μ—΄κ³Ό ν•¨μˆ˜μ—λ„ 일반 객체와 λ§ˆμ°¬κ°€μ§€λ‘œ μ›ν•œλ‹€λ©΄ 속성을 μΆ”κ°€ν•  수 μžˆμ§€λ§Œ, μ‹€μ œλ‘œ 그런 κ²½μš°λŠ” 거의 μ—†λ‹€

(1) λ°°μ—΄

const arr = [1, 2, 3];

console.log(arr[2]); // 3
console.log(arr.title); // undefined

arr.title = 'arrangement'; // 속성 μΆ”κ°€
console.log(arr.title) // arrangement

(2) ν•¨μˆ˜

function adding (a, b) {
  return a + b;
}

console.log(adding(2, 3));
console.log(adding.title); //undefined

adding.title = 'func'; // 속성 μΆ”κ°€
console.log(adding.title); // func

6) property value shorthand

  • key(속성)와 value(κ°’)κ°€ κ°™μœΌλ©΄ key(속성)λ₯Ό μƒλž΅ν•˜κ³  μ“Έ 수 μžˆλ‹€
const personA = {name : 'sam', age: 14 };
const personB = {name : 'daniel', age: 13 };
const personC = {name : 'erick', age: 18};

// λ‹€λ₯Έ 계산을 ν•˜μ§€ μ•Šκ³  objectλ₯Ό λ§Œλ“€μ–΄μ£ΌλŠ” ν•¨μˆ˜ ❗
function makePerson (name, age) {
  return {
    name : name, // name, 라고 쀄여 μ“Έ 수 μžˆλ‹€
    age : age // age 라고 쀄여 μ“Έ 수 μžˆλ‹€
  }
}

const personD = makePerson ('tom', 16);
console.log(personD); // {name : 'tom', age : 16}

cf. μƒμ„±μž ν•¨μˆ˜ ❗

function Person (name, age) {
  // this = {}; κ°€ μƒλž΅λ¨
  this.name = name;
  this.age = age;
  // return this; κ°€ μƒλž΅λ¨
}

const personD = new Person ('tom', 16);
console.log(personD); // {name : 'tom', age : 16}

7) in μ—°μ‚°μž

ν•΄λ‹Ή 객체 μ•ˆμ— ν•΄λ‹Ή keyκ°€ μžˆλŠ”μ§€ 확인해쀀닀

console.log('name' in syong); // true

8) 객체 λ³΅μ œν•˜κΈ°(cloning)

πŸ“Œ for in 반볡문

고전적인 방법

const user1 = {name : 'lee', age : 24};

const user2 = {};
for (key in user1) {
  user2[key] = user1[key];
}

console.log(user2); // {name : 'lee', age : 24}

πŸ“Œ Object.assign()

ν•˜λ‚˜ μ΄μƒμ˜ 원본 객체듀(source)λ‘œλΆ€ν„° λͺ¨λ“  μ—΄κ±° κ°€λŠ₯ν•œ 속성듀을 λŒ€μƒ 객체(target)둜 볡사해쀀닀

const λŒ€μƒ 객체 이름 = {};
Object.assign(λŒ€μƒ 객체 이름, 원본 객체 이름);

πŸ’‘ μ—¬κΈ°μ„œ 잠깐!

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—λŠ” 기본으둜 νƒ‘μž¬λ˜μ–΄ μžˆλŠ” object듀이 μžˆλ‹€. 이λ₯Ό ν‘œμ€€ λ‚΄μž₯ 객체라고 ν•œλ‹€.
  • Object μƒμ„±μžλŠ” ν‘œμ€€ λ‚΄μž₯ 객체 쀑 ν•˜λ‚˜μ΄λ‹€. (μ΄λ•Œ μƒμ„±μžλž€ 객체λ₯Ό λ§Œλ“œλŠ” 역할을 ν•˜λŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€.)
  • 그런데 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λͺ¨λ“  object(객체)λŠ” Object μƒμ„±μžλ₯Ό μƒμ†ν•œλ‹€.
  • λ”°λΌμ„œ μ–΄λ–€ 객체든 λ³΅μ œν•˜κ³ μž ν•  λ•Œ Object μƒμ„±μžμ˜ λ©”μ„œλ“œλ₯Ό μ΄μš©ν•  수 μžˆλ‹€.

βœ” 원본 객체가 1개인 경우

const user1 = {name : lee, age : 24};

// 이 뢀뢄을
const user3 = {};
Object.assign(user3, user1);

console.log(user3); // {name : lee, age : 24}
// μ΄λ ‡κ²Œ 써도 λœλ‹€
const user3 = Object.assign({}, user1);

βœ” 원본 객체가 2개 이상인 경우

const fruit1 = {color: 'red'};
const fruit2 = {color: 'blue', size: 'big'};

const fruit3 = Object.assign({}, fruit1, fruit2);

console.log(fruit3);
// {color: 'blue', size: 'big'}

μ—¬λŸ¬ 개의 원본 객체듀 κ°€μš΄λ° 속성은 κ°™μœΌλ‚˜ 값이 λ‹€λ₯Έ 경우, Object.assign() λ§€κ°œλ³€μˆ˜λ“€ 쀑 뒀에 λ‚˜μ˜€λŠ” 원본 객체의 속성 값이 μš°μ„ ν•œλ‹€.


✨ 내일 ν•  것

  1. λ“œλ¦Όμ½”λ”© 유튜브 'μžλ°”μŠ€ν¬λ¦½νŠΈ' κ°•μ˜ 8편 (λ°°μ—΄)

  2. 사전 ν•™μŠ΅ κ°€μ΄λ“œ STEP2 Arrays, Quiz

profile
λŠ₯λ™μ μœΌλ‘œ μ‚΄μž, ν–‰λ³΅ν•˜κ²ŒπŸ˜

0개의 λŒ“κΈ€