[TIL] 210902

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

TIL

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

πŸ“ 였늘 ν•œ 것

  1. javascript 기초 ν•™μŠ΅

  2. github에 TIL 폴더 λ§Œλ“€κΈ°
    TIL / javascript μ•ˆμ— ν•™μŠ΅ λ…ΈνŠΈ commit & push


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

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

  2. 사전 ν•™μŠ΅ κ°€μ΄λ“œ step 2 (logical operators ~ loops)


πŸ“š 배운 것

1. 논리 μ—°μ‚°μž(logical operators)

πŸ”Ž 본격 ν•™μŠ΅ 전에 κΈ°μ–΅ν•  것!

  • false둜 λ³€ν™˜λ˜λŠ” κ°’ :
    0 | -0 | false | undefined | null | NaN | "" | '' | ``
  • true둜 λ³€ν™˜λ˜λŠ” κ°’ : κ·Έ μ™Έμ˜ κ°’ λͺ¨λ‘

1) || (or)

  • shift + \ λ₯Ό 2번 λˆ„λ₯΄λ©΄ ||이 μž…λ ₯λœλ‹€.

  • value(κ°’ κ·Έ 자체), expression(ν‘œν˜„μ‹), function(ν•¨μˆ˜) λ“± ν”Όμ—°μ‚°μžλ“€ 쀑 ν•˜λ‚˜λΌλ„ true둜 λ³€ν™˜λ˜λŠ” 값이 있으면 console 창에 κ·Έ ν”Όμ—°μ‚°μž κ°’λ₯Ό λ°˜ν™˜ν•œλ‹€. λ°˜λ“œμ‹œ boolean κ°’(true/false)을 λ°˜ν™˜ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€.

  • μ™Όμͺ½λΆ€ν„° truthy 값을 μ°Ύκ³ , 찾은 경우 κ·Έ μ¦‰μ‹œ 연산을 μ€‘μ§€ν•˜κ³  λ°”λ‘œ ν•΄λ‹Ή ν”Όμ—°μ‚°μž 값을 보여쀀닀. λ§ˆμ§€λ§‰κΉŒμ§€ 찾지 λͺ»ν•œ κ²½μš°μ—λŠ”(λͺ¨λ‘ falsy인 κ²½μš°μ—λŠ”) λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•œ ν”Όμ—°μ‚°μž κ°’λ₯Ό λ°˜ν™˜ν•œλ‹€.

console.log(true || false); // true β†’ μ΄λ•Œ trueλŠ” boolean 값이닀
console.log(`or: ${true || false}`); // or: true β†’ μ΄λ•Œ trueλŠ” string이닀
console.log(`or: ${"hello" || []}`); // or: hello
console.log(`or: ${[] || "hello"}`);
// or:  β†’ []λŠ” falsyκ°€ μ•„λ‹ˆλ―€λ‘œ helloκ°€ μ•„λ‹ˆλΌ 처음의 곡백을 λ³΄μ—¬μ€Œ
console.log(`or: ${(function foo () {}) || "hello"}`);
//  or: function foo () {} β†’ 첫 번째 truthyλ₯Ό 찾으면 κ·Έ λ‹€μŒμ€ 보지 μ•Šκ³  ν•΄λ‹Ή ν”Όμ—°μ‚°μžλ₯Ό λ°˜ν™˜ν•¨
console.log(`or: ${false || false}`);
// or: flase β†’ λ§ˆμ§€λ§‰κΉŒμ§€ 값을 찾지 λͺ»ν•œ 경우 λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•œ 값을 λ°˜ν™˜
console.log(`or: ${false || ""}`);
// or:  β†’ λ§ˆμ°¬κ°€μ§€λ‘œ λ‘˜ λ‹€ falsyμ΄λ―€λ‘œ λ§ˆμ§€λ§‰μ˜ 곡백을 λ³΄μ—¬μ€Œ
  • μœ„μ—μ„œλŠ” 이해λ₯Ό μœ„ν•΄ ν”Όμ—°μ‚°μžλ₯Ό μˆœμ„œμ— 상관없이 μ μ—ˆμœΌλ‚˜, 원칙은 μ—°μ‚°μ˜ νš¨μœ¨μ„±μ„ 높이기 μœ„ν•΄ value(κ°’ κ·Έ 자체), expression(ν‘œν˜„μ‹), function(ν•¨μˆ˜) μˆœμ„œλ‘œ 적어야 ν•œλ‹€.

ex.

const value1 = true;
const value2 = 4 < 2;
console.log(`or: ${value1 || value2 || check()}`);

function check() {
  for (let i = 0; i < 10; i++) {
    // waiting time
    console.log('γ… γ… ')
  }
  return true;
}

// or:  true

주의 ❕
console 창에 λ°˜ν™˜λ˜λŠ” 값은 value1이 μ•„λ‹ˆλΌ true이닀.

ν•œνŽΈ,

expression(ν‘œν˜„μ‹)

- λ¦¬ν„°λŸ΄, μ‹λ³„μž, μ—°μ‚°μž, ν•¨μˆ˜ 호좜 λ“±μ˜ μ‘°ν•©
- 값을 λ§Œλ“€μ–΄λ‚΄λŠ” μ½”λ“œ λ‹¨μœ„
- 무엇이든 ν•˜λ‚˜μ˜ 값을 λ°˜ν™˜ν•œλ‹€

statement(λ¬Έ)

- 무엇인가λ₯Ό μˆ˜ν–‰ν•˜λŠ” μ½”λ“œ λ‹¨μœ„
- 값을 λ§Œλ“€μ–΄λ‚΄μ§€ λͺ»ν•œλ‹€

2) && (and μ—°μ‚°μž)

  • value(κ°’ κ·Έ 자체), expression(ν‘œν˜„μ‹), function(ν•¨μˆ˜) λ“± ν”Όμ—°μ‚°μžλ“€ μ „λΆ€κ°€ true둜 λ³€ν™˜λ˜λŠ” 값이라면 console 창에 κ·Έ 쀑 λ§ˆμ§€λ§‰ ν”Όμ—°μ‚°μž κ°’λ₯Ό λ°˜ν™˜ν•œλ‹€. λ°˜λ“œμ‹œ boolean κ°’(true/false)을 λ°˜ν™˜ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€.

  • μ™Όμͺ½λΆ€ν„° falthy 값을 μ°Ύκ³ , 찾은 경우 κ·Έ μ¦‰μ‹œ 연산을 μ€‘μ§€ν•˜κ³  λ°”λ‘œ ν•΄λ‹Ή ν”Όμ—°μ‚°μž 값을 보여쀀닀. λ§ˆμ§€λ§‰κΉŒμ§€ 찾지 λͺ»ν•œ κ²½μš°μ—λŠ”(λͺ¨λ‘ truthy인 κ²½μš°μ—λŠ”) λ§ˆμ§€λ§‰μ— μœ„μΉ˜ν•œ ν”Όμ—°μ‚°μž 값을 λ°˜ν™˜ν•œλ‹€.

console.log(`${"" && "hello"}`);
// 곡백 β†’ 첫번째 falsy 값을 λ³΄μ—¬μ€Œ
console.log(`${(function foo () {}) && {}}`);
// [object Object] β†’ λ‘˜λ‹€ truthyμ΄λ―€λ‘œ λ§ˆμ§€λ§‰ truthy 값을 λ³΄μ—¬μ€Œ
console.log(`${false && ""}`);
// false β†’ 첫번째 falsy 값을 λ³΄μ—¬μ€Œ
  • 이λ₯Ό μ΄μš©ν•΄ and μ—°μ‚°μžλŠ” null 체크에도 많이 쓰인닀.

nullableObject && nullableObject.somthing

μ•žμ˜ ν”Όμ—°μ‚°μžκ°€ null인 경우 이미 falseμ΄λ―€λ‘œ λ’€μ˜ ν”Όμ—°μ‚°μžλŠ” μ•„μ˜ˆ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€. μ•žμ˜ ν”Όμ—°μ‚°μžκ°€ null이 아닐 λ•Œλ§Œ somethingμ΄λΌλŠ” 값을 λ°›μ•„μ˜¨λ‹€.

이λ₯Ό μ½”λ“œλ‘œ ν‘œν˜„ν•˜λ©΄, (λ‚˜μ€‘μ— 배울 것!)

if (nullableObject != null) {
    nullableObject.something;
}

3) ! (not μ—°μ‚°μž)

  • ! 뒀에 μ˜€λŠ” 값이 true둜 λ³€ν™˜λ˜λŠ” 값일 경우 falseλ₯Ό λ°˜ν™˜ν•˜κ³ , false둜 λ³€ν™˜λ˜λŠ” 값일 경우 trueλ₯Ό λ°˜ν™˜ν•œλ‹€.
console.log(`${!"abc"}`); // false
console.log(`${!""}`); // true
console.log(!`${Boolean('   '.trim())}`);
/*
true β†’ μ›λž˜λŠ” 곡백 λ¬Έμžμ—΄μ΄λΌ true인데
trim() ν•¨μˆ˜λ‘œ λ¬Έμžμ—΄ μ–‘μͺ½ 곡백을 μ œκ±°ν•΄μ„œ falseκ°€ 됐닀가
여기에 not μ—°μ‚°μžκ°€ λΆ™μ–΄μ„œ λ‹€μ‹œ trueκ°€ 됨
*/

2. λ“±ν˜Έ(equlity)

1) == (loose equality)

  • 동등 비ꡐ, 값이 κ°™λ‹€

  • != : 값이 같지 μ•Šλ‹€

2) === (strict equality)

  • 일치 비ꡐ, κ°’κ³Ό νƒ€μž…μ΄ λͺ¨λ‘ κ°™λ‹€

  • !== : κ°’μ΄λ‚˜ νƒ€μž…μ΄ 같지 μ•Šλ‹€.

const syong1 = {name: 'syong'};
const syong2 = {name: 'syong'};
const syong3 = syong1

console.log(syong1 == syong2);
// false β†’ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ” referenceκ°€ μ„œλ‘œ λ‹€λ₯΄λ‹€
console.log(syong1 === syong2);
// false β†’ νƒ€μž…μ΄ λ˜‘κ°™λ“  μ•„λ‹ˆλ“  간에 λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ” referenceλΆ€ν„° μ„œλ‘œ λ‹€λ₯΄λ‹€
console.log(syong1 === syong3);
// true β†’ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜λŠ” referenceκ°€ μ„œλ‘œ κ°™λ‹€

3. 쑰건문

1) if / else if / else

  • ν˜•μ‹
if (/* 쑰건(μ°Έ κ±°μ§“μœΌλ‘œ ν‰κ°€λ˜λŠ” expression) */) {
  // μ‹€ν–‰λ¬Έ(statement)
}
  • 쀑첩 κ°€λŠ₯
    κ·ΈλŸ¬λ‚˜ μ—¬λŸ¬ 개의 else if 쀑 '단 ν•œ 가지'의 쑰건뢀 μ½”λ“œλ§Œ μ‹€ν–‰λœλ‹€.
    (∡ else = μ•„λ‹ˆλ©΄~)

  • μ‹€ν–‰ μˆœμ„œ

    • if statementκ°€ trueλ©΄, {}μ•ˆμ˜ λ‚΄μš©μ„ μ‹€ν–‰ν•œλ‹€.

    • if statementκ°€ falseλ©΄, κ·Έ λ‹€μŒ else if둜 λ„˜μ–΄κ°„λ‹€.

    • else if statementκ°€ trueλ©΄, {} μ•ˆμ˜ λ‚΄μš©μ„ μ‹€ν–‰ν•œλ‹€.

    • else if statementκ°€ falseλ©΄, else둜 λ„˜μ–΄κ°€μ„œ {} μ•ˆμ˜ λ‚΄μš©μ„ μ‹€ν–‰ν•œλ‹€.

const name = 'sysysy';

if (name === 'sy') {
  console.log('hello');
} else if (name === 'sysy') {
  console.log('bye');
} else {
  console.log('unknown');
}
// unknown

2) 쑰건뢀 μ‚Όν•­ μ—°μ‚°μž(ternary operator)

  • κ°„λ‹¨ν•œ κ²½μš°μ—λ§Œ μ‚¬μš©

  • λ³΅μž‘ν•œ κ²½μš°μ—λŠ” ifλ‚˜ switchλ₯Ό μ‚¬μš©ν•  것

const name = 'sysysy';
console.log(name === 'sy' ? 'yes' : 'no'); // no
  • ? name이 sy 맞으면 yes 좜λ ₯

  • : name이 sy μ•„λ‹ˆλ©΄ no 좜λ ₯

3) switch 쑰건문

  • caseλ¬Έ λ’€μ—λŠ” μƒμˆ˜ κ°’λ§Œ 올 수 μžˆλ‹€

  • typescriptμ—μ„œ μ •ν•΄μ Έ μžˆλŠ” νƒ€μž…μ„ 검사할 λ•Œ μ‚¬μš©

const browser = 'chrome';

switch (browser) {
  case 'IE':
    console.log('IE');
    break; // 뜻 : ν˜„μž¬ 쑰건문을 μ’…λ£Œν•˜κ² λ‹€
  case 'firefox':
  case 'chrome':
    console.log('firefox or chrome');
    break;
  case 'mozilla':
    console.log('mozilla');
    break;
}
// firefox or chrome

해석 : browser의 값이 IE이면 console 창에 IEλ₯Ό 보여주고 ν˜„μž¬ 쑰건문을 μ’…λ£Œν•˜κ³ , browser의 값이 firefox ν˜Ήμ€ chrome이면 console 창에 firefox or chrome을 보여주고 ν˜„μž¬ 쑰건문을 μ’…λ£Œν•˜κ³ ...


4. 반볡문(loop)

1) while 반볡문

  • while 쑰건식이 falseκ°€ 되기 μ „κΉŒμ§€ λ¬΄ν•œλŒ€λ‘œ λ°˜λ³΅ν•΄μ„œ μ‹€ν–‰ν•œλ‹€

  • 쑰건이 trueμ—¬μ•Όλ§Œ 블둝을 μ‹€ν–‰ν•œλ‹€

let j = 3;

while (j > 0) {
  console.log(`while: ${j}`);
  j--;
}

2) do while 반볡문

  • 일단 블둝을 λ¨Όμ € μ‹€ν–‰ν•˜μ—¬ 좜λ ₯을 ν•œ ν›„ 블둝 λ°”κΉ₯의 while 쑰건식이 참인지 거짓인지 κ²€μ‚¬ν•΄μ„œ falseκ°€ 되면 λ©ˆμΆ”λ„λ‘ ν•œλ‹€

  • 블둝을 λ¨Όμ € μ‹€ν–‰ν•˜κ³ , 쑰건이 true인지 κ²€μ‚¬ν•œλ‹€

μœ„μ˜ while 반볡문 μ˜ˆμ œμ™€ 이어짐

do {
  console.log(`do while: ${j}`);
  i--;
} while (j > 0)

3) for 반볡문

for (β‘  μ‹œμž‘; β‘‘ 쑰건; β‘£ 단계) {
  β‘’ μ‹€ν–‰λ¬Έ;
}
  • β‘  ~ β‘£ μˆœμ„œλŒ€λ‘œ 진행
  • ①에 지역 λ³€μˆ˜ μ„ μ–Έ κ°€λŠ₯

ex.

for (var i = 1; i < 11; i += 2) {
  if (i === 7) {
    break; // 전체 반볡문 μ’…λ£Œ
  }

  console.log(i);
}
/*
1
3
5
*/

for (var i = 1; i < 11; i += 2) {
  if (i === 7) {
    continue; // κ·Έ 반볡문만 μ’…λ£Œ
  }

  console.log(i);
}
/*
1
3
5
9
*/

과제

var naming = "ken";
// 과제 1) μ—­μˆœμœΌλ‘œ ν•œ κΈ€μžμ”© 좜λ ₯ν•˜λŠ” 반볡문 μž‘μ„±ν•΄λ³΄μ„Έμš”.

for (var i = 2; i > -1; i -= 1) {
  console.log(naming[i]);
}

var longText = "0i1a2m3k4e5n";
// 과제 2) ν™€μˆ˜ 번째 κΈ€μžλ§Œ 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄μ„Έμš”.

for (var i = 0; i < 12; i += 2) {
  console.log(longText[i]);
}

4) 쀑첩(nested) 반볡문

whileκ³Ό for 반볡문 λͺ¨λ‘ 쀑첩이 κ°€λŠ₯ν•˜μ§€λ§Œ, λ˜λ„λ‘μ΄λ©΄ ν•˜μ§€ μ•Šλ„λ‘ ν•œλ‹€.

5) break; VS continue;

  • break; β†’ κ±°κΈ°μ„œλΆ€ν„° 전체 반볡문 μ’…λ£Œ

  • continue; β†’ ν•΄λ‹Ή 반볡문만 μ’…λ£Œ

과제 1) 0λΆ€ν„° 10κΉŒμ§€ λ°˜λ³΅ν•˜λ˜ 짝수만 좜λ ₯해라 (continue 이용)

for (a = 0; a < 11; a++) {
  if (a % 2 !== 0) {
    continue;
  }

  console.log(a);
}

과제 2) 0λΆ€ν„° 10κΉŒμ§€ λ°˜λ³΅ν•˜λ˜ 8κΉŒμ§€ 숫자λ₯Ό 좜λ ₯해라 (break 이용)

for (b = 0; b <11; b++) {
  if (b === 9) {
    break;
  }

  console.log(b)
}

✨ 내일 ν•  것

  1. μžλ°”μŠ€ν¬λ¦½νŠΈ 20λΆ„μ§œλ¦¬ κ°•μ˜λ₯Ό λ“£κ³  μΆ”κ°€ 검색을 톡해 더 μ•Œμ•„λ³΄κ³  직접 μ½”λ“œλ₯Ό μž‘μ„±ν•΄λ³΄κ³  μ΄ν•΄ν•΄μ„œ λΈ”λ‘œκ·Έμ— μ •λ¦¬ν•˜κΈ°κΉŒμ§€ 거의 κΌ¬λ°• ν•˜λ£¨κ°€ κ±Έλ Έλ‹€. μ§„λ„λŠ” ν•˜λ£¨μ— ν•œ νŽΈμ”© λ‚˜κ°€λŠ” 걸둜 μ „λ©΄ μˆ˜μ •ν•΄μ•Ό ν•  λ“―.

  2. κΉƒν—ˆλΈŒμ—λ„ TIL을 올리기 μ‹œμž‘ν–ˆλ‹€. 내일뢀턴 μ†Œμ œλͺ©λ³„λ‘œ λ‚˜λˆ μ„œ μ»€λ°‹ν•˜λ €κ³  ν•œλ‹€.

  3. 였래 걸리긴 ν–ˆμ–΄λ„ λ°°μš°λŠ” 건 κ±±μ •ν–ˆλ˜ 것보닀 μž¬λ°Œμ—ˆλŠ”λ° λ§ˆμ§€λ§‰μœΌλ‘œ μ—°μŠ΅ 문제λ₯Ό ν’€μ–΄λ³΄λ €λ‹ˆκΉŒ 잘 μ•ˆ ν’€λ¦°λ‹€. 뭐뢀터 μ“°κΈ° μ‹œμž‘ν•΄μ•Ό 할지 잘 λͺ¨λ₯΄κ² λ‹€. 문제λ₯Ό 많이 접해봐야 ν•  κ±° κ°™λ‹€. 볡슡 ν•„μˆ˜.

  4. 결과적으둜 내일 ν•΄μ•Ό ν•  건 javascript 볡슡, exercise ν•΄κ²°, 'μžλ°”μŠ€ν¬λ¦½νŠΈ 기초 κ°•μ˜' 5편 μˆ˜κ°•!

    (211010 볡슡 쀑)
    와 λ‚΄κ°€ μ΄λ ‡κ²Œ μƒκ°ν–ˆμ—ˆκ΅¬λ‚˜. 뢈과 ν•œλ‹¬ 전인데...아직도 λͺ¨λ₯΄λŠ” 게 μ‚°λ”λ―Έμ§€λ§Œ, 이제 for ꡬ문은 무섭지 μ•Šλ‹€! 😁

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

0개의 λŒ“κΈ€