์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฐ์ดํฐ์ ๊ฐ์ด ์ ํจํ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐ ํ ๊ฒฝ์ฐ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ๋ ๊ธ-!
๐ ์ฐ์ 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 - ์ด์ ๋ชจ (์ํค๋ถ์ค)