๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JavaScript

[ JavaScript / ์—ฐ์‚ฐ์ž ] ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜์—ฌ null ๋˜๋Š” undefined ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์ด ์œ ํšจํ•œ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ฐธ์กฐ ํ•  ๊ฒฝ์šฐ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜๋Š” ๊ธ€-!

 

 

 

 

 

๐Ÿ‘‰ ์šฐ์„  falsy๊ฐ’์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž-! ์•„๋ž˜์™€ ๊ฐ™์€ ์•„์ด๋“ค์ด falsy๊ฐ’์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.


- false;
- null;
- NaN;
- 0;
- empty string ("" or '' or ``);
- undefined.

 

 

 

 

 

 

 

1. ๋ฐ์ดํ„ฐ๊ฐ€ null ๋˜๋Š” undefined ๋งŒ ํ•ด๋‹น๋  ๋•Œ

 

 

 null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??) ์‚ฌ์šฉ

let data = {
  name: null,
  age: 20
};

const userName = data.name ?? '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';
console.log(userName); // ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.

 

E11์—์„œ ๋„์ž…๋œ null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)๋Š” ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” undefined ์ผ ๋•Œ, ์šฐํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ null ๋˜๋Š” undefined๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค. 

 

 

์œ„์™€ ๊ฐ™์ด ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•˜๋ฉฐ, null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž(??)๋Š” ์ขŒํ•ญ์ด falsy๊ฐ’ ( '', null, undefined, false, 0, NaN ๋“ฑ) ์ด๋ผ๋„ null ์ด๋‚˜ undefined๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ

 

let data = {
  name: '',
  age: 20
};

const userName = data.name ?? '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';
console.log(userName); // ''

 

userName2 ๋ฅผ ์ฝ˜์†”๋กœ ์ฐ์–ด๋ณด๋ฉด falsy ๊ฐ’์— ํ•ด๋‹น๋˜๋Š” ๋นˆ ๋ฌธ์ž์—ด('')์ธ ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜๋œ๋‹ค.

๊ทธ ์ด์œ ๋Š” null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž๋Š” null ๊ณผ undefined์— ํ•ด๋‹น๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์šฐํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. data๊ฐ€ '', null, undefined, false, 0, NaN ... ๋“ฑ์˜ falsy ๊ฐ’์ผ ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•. 

 

 

 

1) OR ๋…ผ๋ฆฌํ•ฉ(||) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์ถ• ํ‰๊ฐ€

 

๋…ผ๋ฆฌํ•ฉ(||) ์—ฐ์‚ฐ์ž๋Š” ๋‘ ๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž ์ค‘ ํ•˜๋‚˜๋งŒ true๋กœ ํ‰๊ฐ€๋˜์–ด๋„ true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ true ๋ผ๋ฉด ์šฐํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์•„๋„ ํ‘œํ˜„์‹ ํ‰๊ฐ€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. true๋กœ ํ‰๊ฐ€๋˜์–ด ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ •ํ•œ ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

ํ‘œํ˜„์‹ ๊ฒฐ๊ณผ
true || 'Hi' true
'Hi' || true 'Hi'
false || 'Hi' 'Hi'
'Hi' || false
'Hi'

false || ''
''

 

* ๋‘˜ ๋‹ค falsy ๊ฐ’์ผ ๊ฒฝ์šฐ์—” ์šฐํ•ญ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

 

 

 

 

์กฐ๊ฑด์ด falsy๊ฐ’์ผ ๋•Œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผํ•œ๋‹ค๋ฉด ๋…ผ๋ฆฌํ•ฉ ์—ฐ์‚ฐ์ž(||) ํ‘œํ˜„์‹์œผ๋กœ if๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

let data = {
  name: 'ํ™๊ธธ๋™',
  age: 20
};

const userName = data.name || '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';
console.log(userName); // 'ํ™๊ธธ๋™'
// data.name ์„ true๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด data.name ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ ,  
// ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.' ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 
// ๋”ฐ๋ผ์„œ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ, ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ฐธ์ผ ๋•Œ true๋ฅผ, ๊ทธ ์™ธ์—๋Š” false๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.



let data2 = {
  name: '',
  age: 20
};

const userName2 = data2.name || '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';


console.log(userName2); // ''

 

 

 

 

 

 

 

 

 

 2) AND ๋…ผ๋ฆฌ๊ณฑ(&&) ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์ถ• ํ‰๊ฐ€

 

๋…ผ๋ฆฌ๊ณฑ ์—ฐ์‚ฐ์ž(&&)์€ ๋‘ ๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋ชจ๋‘ true ์ผ ๋•Œ, true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ true ์ผ ๋•Œ, ์šฐํ•ญ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋…ผ๋ฆฌ๊ณฑ ์—ฐ์‚ฐ์ž์˜ ์ขŒํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ true๋ผ๋„ ์šฐํ•ญ์˜ ์—ฐ์‚ฐ์ž๊นŒ์ง€ ํ‰๊ฐ€ํ•ด์•ผํ•œ๋‹ค. ์šฐํ•ญ์˜ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋…ผ๋ฆฌ๊ณฑ ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. 

 

ํ‘œํ˜„์‹ ๊ฒฐ๊ณผ
true && 'Hi' 'Hi'
'Hi' && true true
false && 'Hi' false
'Hi' && false
false

false && ''
false

 

 

 

์กฐ๊ฑด์ด truthy๊ฐ’ ์ผ ๋•Œ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด, ๋…ผ๋ฆฌ๊ณฑ ์—ฐ์‚ฐ์ž(&&) ํ‘œํ˜„์‹์œผ๋กœ if๋ฌธ์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค.

 

let data = {
  name: 'ํ™๊ธธ๋™',
  age: 20
};

const userName = data.name && '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';
console.log(userName); // '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.'
// ์ขŒํ•ญ์ด true์ผ ๋•Œ ์šฐํ•ญ์„ return.



let data2 = {
  name: '',
  age: 20
};

const userName2 = data2.name && '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';


console.log(userName2); // ''

 

 

 

 

 

 

 

 

3) ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž 

 

์กฐ๊ฑด์‹์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋ฐ˜ํ™˜ํ•  ๊ฐ’์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ๋ถ€์ˆ˜ ํšจ๊ณผ๋Š” ์—†๋‹ค. ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๋Š”  ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ true๋กœ ํ‰๊ฐ€๋˜๋ฉด ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž(์ฝœ๋ก (:)์˜ ์•ž์— ์žˆ๋Š” ์—ฐ์‚ฐ์ž)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ false๋กœ ํ‰๊ฐ€๋˜๋ฉด ์„ธ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž(์ฝœ๋ก (:)์˜ ๋’ค์— ์žˆ๋Š” ์—ฐ์‚ฐ์ž)๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์ฆ‰, ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๋Š” ์กฐ๊ฑด์‹์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž ๋˜๋Š” ์„ธ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋กœ ํ‰๊ฐ€๋˜๋Š” ํ‘œํ˜„์‹์ด๋‹ค.

 

let data = {
  name: 'ํ™๊ธธ๋™',
  age: 20
};

const userName = data.name ? data.name : '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';
// ์กฐ๊ฑด์‹ ? ture ์ผ ๋•Œ ๋ฆฌํ„ด ๊ฐ’ : false ์ผ ๋•Œ ๋ฆฌํ„ด ๊ฐ’.

console.log(userName); // 'ํ™๊ธธ๋™'



let data2 = {
  name: '',
  age: 20
};

const userName2 = data2.name && '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.';


console.log(userName2); // '์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.'

 

 

 

 

 

 

 

 

 

 

 

์ฐธ๊ณ )

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive - ์ด์›…๋ชจ (์œ„ํ‚ค๋ถ์Šค)

MDN Null ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž

MDN ์‚ผํ•ญ ์กฐ๊ฑด ์—ฐ์‚ฐ์ž

MDN OR ์—ฐ์‚ฐ์ž

MDN AND ์—ฐ์‚ฐ์ž