[Front-end๐Ÿฆ] #22 JavaScript / Deep Dive 2~9์žฅ

๋˜์ƒยท2021๋…„ 11์›” 29์ผ
0

front-end

๋ชฉ๋ก ๋ณด๊ธฐ
36/58
post-thumbnail

1. JavaScript

๋ฌธ๋ฒ• ์ •๋ฆฌ๋Š” #21์— ์—ฌ๊ธฐ์—๋Š” ์ •๋ฆฌํ•˜๊ธฐ๋Š” ์กฐ๊ธˆ ์• ๋งคํ•˜์ง€๋งŒ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ์‚ฌ์‹ค์„ ์“ฐ๋ ค๊ณ  ํ•œ๋‹ค.

  • ๋ณ€์ˆ˜ ํ• ๋‹น ์‹œ ๊ฐ’์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋„ฃ๊ณ  ๊ทธ๊ฒƒ์„ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋งŒ๋“ ๋‹ค. ๊ฐ ๋ณ€์ˆ˜์— ๊ฐ™์€ ์ˆ˜๋ฅผ ํ• ๋‹นํ•ด๋„ ์ฃผ์†Œ๋Š” ๋ชจ๋‘ ๋‹ค๋ฅธ๊ฒŒ ์ •์„์ ์ธ๋ฐ, ํŒŒ์ด์ฌ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด 0~256์€ ๋ฏธ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค๋†“๊ณ  ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๋ฉด ๊ทธ๊ฒƒ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋งŒ๋“ ๋‹ค.
0b10 //2์ง„์ˆ˜ 2
0o10 //8์ง„์ˆ˜ 8 - ์ด๊ฒŒ ์˜์™ธ์˜€๋‹ค. ๊ทธ๋ƒฅ ์•ž์— 0์“ฐ๋Š” ์–ธ์–ด๋„ ์žˆ๋Š”๋ฐ
0x10 //16์ง„์ˆ˜ 16

&& || ! ๋ฌธ์ œ

1. false || true // t
2. true && false // f
3. !true //f
4. !((true && false) || (true && false)) //t
5. let x = 10
!((x % 5 == 0 && x % 2 == 0) || (x / 2 == 5 && false)) //f
6. let y = 10
(false && y % 2 == 0) && (y / 2 == 5 && false) //f
7. let z = 3
(true && z % 3 == 0) || (z / 2 !=!= 5 && false) // !=!=๋Š” ์ž˜๋ชป๋œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.ใ…Žใ…Ž
// error ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋Š” ์žก์Œ.
// ๋“œ๋ชจ๋ฅด๊ฐ„ ๋ฒ•์น™
!(x || y) === (!x && !y)
!(x && y) === (!x || !y)


2. Deep Dive

์˜ค๋Š˜๋ถ€ํ„ฐ.. ์ง„๋„์— ๋งž์ถฐ์„œ ๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฝ์–ด๋‚˜๊ฐ€๊ธฐ๋กœ ํ–ˆ๋‹ค!

2~9์žฅ์„ ์ฝ์—ˆ๋Š”๋ฐ ์•ž๋ถ€๋ถ„์ด๊ธฐ๋„ ํ•˜๊ณ , const let ์„ ์ œ์™ธํ•˜๋ฉด if switch for while do~while ์ด ํฌ๊ฒŒ ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๋‹ค๋ฅด์ง€ ์•Š์•„์„œ ์˜ค๋Š˜ ์ˆ˜์—…์—์„œ๋„ ๋‹ค๋ฃฌ JavaScript์˜ ๋ฏธ์ณ๋ฒ„๋ฆฐ type casting ์— ์‹œ๊ฐ„์„ ์Ÿ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

#21 ์— ์ถ”๊ฐ€๋กœ ์ •๋ฆฌํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค ์‹ถ์–ด์„œ ์‚ด ๋ถ™์ธ ๋‚ด์šฉ ์™ธ์— ์ˆ˜์—…์—์„  ๋‹ค๋ฃจ์ง€ ์•Š์€ ์ƒˆ๋กœ ์•Œ๊ฒŒ ๋œ ๋ถ€๋ถ„๋“ค์„ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

  1. Symbol type : ๋”ฑ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•˜๋Š” ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’.
var key = Symbol('key');
Symbol('key') === Symbol('key') // false

์ฐพ์•„๋ณด๋‹ˆ๊นŒ ID ๊ฐ™์ด ์œ ์ผ๋ฌด์ดํ•œ ๊ฐ’์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ์ •ํ™•ํžˆ๋Š” ์ž˜ ๊ฐ์ด ์•ˆ์˜จ๋‹ค.

  1. for ๋ฌธ์—์„œ label ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ”๊นฅ for ๋ฌธ์„ ํƒˆ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.
outer: for(let i = 0; i < 3; i++) {
  for(let j = 0; j < 3; j++) {
    if(i+j == 0) break outer;
  }
}
  1. type casting - truthy, falsy
// String : val + '' ๋งŽ์ด ์”€.
String(val);  val.toString();  val + '';
// Number : parseInt๊ฐ€ ์•ˆ์ „
Number(val);  parseInt(val);  +val;  val * 1;  -'123'; //-123
// Boolean
Boolean(val);  !!falsy;  !!truthy;
!!NaN; !!undefined //false
false == !!undefined;
  1. && || ์˜ ํ™œ์šฉ
// if (truthy) ๋ฌธ์„ && ์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ.
if (done) msg = "๋‹คํ–ˆ๋‹ค.";
msg = doen && "๋‹คํ–ˆ๋‹ค.";
// if (falsy) ๋ฌธ์„ || ์œผ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ.
if (!done) msg = "๋ชปํ–ˆ๋‹ค.";
msg = done || "๋ชปํ–ˆ๋‹ค.";
//if -else ๋Š” ์‚ผํ•ญ์กฐ๊ฑด์ž๊ฐ€ ๋Œ€์ฒด๊ฐ€๋Šฅ ์‚ผํ•ญ์กฐ๊ฑด์ž๋Š” ์•„๋ž˜๋กœ ๋Œ€์ฒด๊ฐ€๋Šฅ.
true && '๋‹คํ–ˆ๋‹ค.' || '๋ชปํ–ˆ๋‹ค.';
  1. optional chaining (?.), null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž (??)
// ?. ์•ž์˜ ๊ฐ’์ด null, undefined ๋ฉด ์•ž์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜. ์•„๋‹ˆ๋ฉด ๋’ค์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜.
// ์ด๊ฑธ && ๋กœ ์ผ์—ˆ๋‹ค. -> ๋ฌธ์ œ: ์•ž์˜ ๊ฐ’์ด null, undefined๊ฐ€ ์•„๋‹Œ falsy ๊ฐ€ ๋‚˜์˜ค๋ฉด... ์›ํ•˜๋˜๋Œ€๋กœ ๋’ค์˜ ๊ฐ’์„ ๋ชป์–ป์Œ.
var str = '';
var value = str && str.length;
var value = str?.length; 
// ?? ์•ž์ด null, undefined ์ด๋ฉด ๋’ค์˜ ๊ฒƒ์ด ๋‚˜์˜ค๊ณ , ์•„๋‹ˆ๋ฉด tmp ๊ฐ’์ด ๋‚˜์˜ด.
// ์ด๊ฑด || ์ผ์—ˆ๋Š”๋ฐ, ์—ญ์‹œ n u ๊ฐ€ ์•„๋‹Œ falsy ๊ฐ€ ๋‚˜์˜ค๋ฉด ์„ค๊ณ„๋Œ€๋กœ ๋™์ž‘ X
var tmp = null;
var value = tmp || "์˜ค์šฐ null ์ž…๋‹ˆ๋‹ค.";
var value = tmp ?? "์˜ค์šฐ null ์ž…๋‹ˆ๋‹ค.";
  1. ๋ณ€์ˆ˜์˜ ํ˜ธ์ด์ŠคํŒ…
//์•„๋ž˜ ๋‘ ์ค„์€ ๋‹ค๋ฅธ ๋ฌธ์žฅ์ด์ง€๋งŒ, js ์—”์ง„์—๊ฒŒ๋Š” ๊ฐ™์€ ๋ฌธ์žฅ. ์ผ๋‹จ ์„ ์–ธ๋ถ€๋ฅผ ์ฐพ์•„์„œ ์ „๋ถ€ ์„ ์–ธ์„ ํ•ด์„œ undefined ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•ด๋‘๊ณ , ํ• ๋‹น ๋ถ€๋ถ„์€ ๊ทธ ๋‹ค์Œ์— ์‹คํ–‰ํ•œ๋‹ค.
// let, const ์˜ ๊ฒฝ์šฐ๋Š” undefined๋กœ ์„ ์–ธ์„ ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜๋‚จ!
var a; a = 100;
var a = 100;

const let var ์ฐจ์ด




profile
0๋…„์ฐจ iOS ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€