๐ Chapter 4 : ์กฐ๊ฑด๋ฌธ์ ๊น๋ํ๊ฒ ์์ฑํ๋ผ.
๐ฏ ๊ฑฐ์ง ๊ฐ์ด ์๋ ์กฐ๊ฑด๋ฌธ์ ์ถ์ฝํ๋ผ.โ
- ๊ฐ์ ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ๋ ๋ฐฉ๋ฒ์ ๋ถ ์๋ฃํ(boolean type)์ด๋ผ๊ณ ๋ถ๋ฅด๋ ์์๊ฐ
true
,false
์ ์ฐธ ๋๋ ๊ฑฐ์ง ๊ฐ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ์ฌ์ด์ ๋ฏธ๋ฌํ ์ฐจ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ด๋ค. - ๋๋ฑ์ ๋ด์ฉ์ ๊ฐ์ง๋ง ์๋ฃํ์ด ์๋ก ๋ค๋ฅธ ๊ฐ์ ๋น๊ตํ ๋
==
์ ์ด์ฉํด์ ํ์ธํ ์ ์๋ค.
1 == '1' // true
- ๋์ผํ ๊ฐ ๋๋ ์๊ฒฉํ ์ผ์นํ๋ ๊ฐ์ด๋ ๋ ๊ฐ์ด ์๋ก ๋์ผํ ๋ฟ๋ง ์๋๋ผ ์๋ฃํ๋ ๊ฐ์ ๊ฒ์ ์๋ฏธํ๋ค.
1 === '1' // false
1 === 1 // true
- ๋น ๋ฌธ์์ด์ false์ ๋๋ฑํ๋ค. ๊ทธ๋ ์ง๋ง ์ผ์นํ์ง๋ ์๋๋ค. ๋ค์ ๋งํด ๋น ๋ฌธ์์ด์ ๊ฑฐ์ง ๊ฐ์ด๋ค.
'' == false; // true
'' === false; // false
- ๐ ๊ฑฐ์ง ๊ฐ์ ๋ชฉ๋ก MDN ์ฐธ๊ณ
- ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์ ๊ฒฝ์ฐ ๋น ๋ฐฐ์ด ๋๋ ๋น ๊ฐ์ฒด๋ผ๋ ํญ์ ์ฐธ๊ฐ์ด๋ค.
- ๋ฐ๋ผ์ ๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ด ๋น์ด์๋์ง ํ์ธํ๋ ค๋ฉด,
[].length
๋๋Object.keys({}).length
์ฒ๋ผ0
๋๋ ์ฐธ๊ฐ์ธ ์ซ์๋ฅผ ๋ฐํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํ๋ค. - ์๋์ ๋ค๋ฅด๊ฒ ๊ฑฐ์ง ๊ฐ์ ๋ง๋๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
- ๊ฐ์ฅ ํํ ๋ฌธ์ ๋ ์๋์ ๊ฐ์ด ์์ธ์ ์ฌ์ฉํด ๋ฐฐ์ด์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ ๊ฒฝ์ฐ์ด๋ค.
['a','b'].indexOf('a');
// return 0 => 0์ false
- ํ์ง๋ง ์ด ๊ฒฝ์ฐ๋
Array.includes()
๋ฅผ ์ฌ์ฉํด ํด๊ฒฐํ ์ ์๋ค. - ๋ํ, ์ ์๋์ง ์์ ํค-๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์ํ ๋ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ ์ ์๋๋ฐ ์ ์๋์ง ์์ ํค์ ๊ฐ์ ๊ฐ์ ธ์ค๋ฉด
undefined
์ด๋ค. - ์ด ๊ฒฝ์ฐ ์ฝ๋์ ๋ค๋ฅธ ๊ณณ์ ๊ฐ์ฒด ๋๋ ๋งต์ ๋ณ๊ฒฝํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
const employee = {
name: 'Eric',
equipmentTraining: true,
};
function listCerts(employee) {
if(employee.equipmentTraining) {
employee.certificates = ['Equipment'];
// ์กฐ์
delete employee.equipmentTraining;
}
// ...์๋ต
}
function checkAuthorization() {
if(!employee.equipmentTraining) {
return '๊ธฐ๊ณ๋ฅผ ์๋ํ ๊ถํ์ด ์์ต๋๋ค.';
}
return `๋ฐ๊ฐ์ต๋๋ค! ${employee.name} ๋`;
}
listCerts(employee);
checkAuthorization(employee); // "๊ธฐ๊ณ๋ฅผ ์๋ํ ๊ถํ์ด ์์ต๋๋ค."
- ์ ์์ ์ฝ๋์์
listCerts
ํจ์์์ ๊ฐ์ฒด๋ฅผ ์กฐ์ํ๊ณ ํค-๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์๋ค. - ๊ทธ ํ
checkAuthorization
์์ ๊ฐ์ฒด์ ๊ฐ์ด ์ ๋์ง ๊ฒ์ฌํ๋ค. - ๊ฐ์ฒด์ ํค๋ฅผ ์ ์ํ์ง ์์ ๊ฒฝ์ฐ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์๊ณ ,
undefined
๋ฅผ ๋ฐํํ๋ค. (๋งต๋ ๋์ผ) - ์ฝ๋๋ฅผ ์ ๊ฒํด ๋ณด๋ฉด ์ง์์ด ์ธ์ฆ์๋ฅผ ๋ฐ์์ ์กฐ๊ฑด๋ฌธ์ ํต๊ณผํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ด๊ฒ์ ์๋ชป๋์๋ค.
- ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์ฒซ ๋ฒ์งธ์ด์ ์๋ฑํ ๋ ์ข์ ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ์ง ์๋ ๊ฒ์ด๋ค.
- ๋ง์ฝ ๊ทธ๋ด ์ ์๋ ์ํฉ์ด๋ผ๋ฉด, ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ์๊ฒฉํ ์ผ์น(strict equivalency)๋ฅผ ์ด์ฉํด์ ๊ฐ์ด ์๋์ง, ์ํ๋ ํ์์ธ์ง ํ์ธํ๋ค.
function checkAuthorization() {
if(employee.equipmentTraining !== true) {
return '๊ธฐ๊ณ๋ฅผ ์๋ํ ๊ถํ์ด ์์ต๋๋ค.';
}
return `๋ฐ๊ฐ์ต๋๋ค! ${employee.name} ๋`;
}
checkAuthorization(employee); // "๊ธฐ๊ณ๋ฅผ ์๋ํ ๊ถํ์ด ์์ต๋๋ค."
๐ฏ ์ผํญ ์ฐ์ฐ์๋ก ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ๋ผ.โ
- ์ผํญ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ๋ฉด ๋ณ์์ ์ฌํ ๋น์ ์ค์ผ ์ ์๋ค.
- ๊ฒ๋ค๊ฐ ์๋ก์ด ๋ณ์ ์ ์ธ ๋ฐฉ์์
if/else
๋ฌธ์ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ ๋ฌธ์ ๋ก ์ด์ด์ง๊ธฐ๋ ํ๋ค. - ๋ธ๋ก ์ ํจ ๋ฒ์ ๋ณ์๋ฅผ ํ์ธํ๋ ค๊ณ ํ ๋ ๋ธ๋ก ๋ฐ์์๋ ํ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ ์ ์๋ค.
if (title === '๊ณผ์ฅ') {
const permissions = ['๊ทผ๋ก์๊ฐ','์๋น'];
} else {
const permissions = ['๊ทผ๋ก์๊ฐ'];
}
permissions; // Uncaught ReferenceError: permissions is not defined
- ์ด๋ ๊ฒ ๋๋ฉด ๋ธ๋ก ์ ํจ ๋ฒ์ ๋ฐ์์๋ ์ ๊ทผ ๊ฐ๋ฅํ
var
๋ก ๋ณ์๋ฅผ ์ ์ธํ๊ฑฐ๋let
์ผ๋ก ๋ณ์๋ฅผ ์ ์ธํ๊ณif/esle
๋ฌธ ๋ด๋ถ์์ ์ฌํ ๋นํด์ผ ํ๋ค.
let permissions;
if (title === '๊ณผ์ฅ') {
permissions = ['๊ทผ๋ก์๊ฐ','์๋น'];
} else {
permissions = ['๊ทผ๋ก์๊ฐ'];
}
- ํ์ง๋ง ๋ณ์๊ฐ ์์ฑ๋๋ ์์ ์ ๊ฑฑ์ ํด์ผ ํ๊ณ , ์ ์ฌ์ ์ธ ์ ํจ ๋ฒ์ ์ถฉ๋๊น์ง ๊ณ ๋ คํด์ผ ํ๋ค.
- ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์ผํญ ์ฐ์ฐ์๋ก ํด๊ฒฐํ ์ ์๋ค.
- ๋ํ, ์ผํญ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์
const
์ ์ง์ ์ ์ธํ๋ฏ๋ก ์ข ๋ ์์ธก ๊ฐ๋ฅํ๋ค.
const permissions = title === '๊ณผ์ฅ' ? ['๊ทผ๋ก์๊ฐ','์๋น'] : ['๊ทผ๋ก์๊ฐ'];
- ํ ๊ฐ์ง ์ฃผ์ํ ์ ์ ์ผํญ ์ฐ์ฐ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ ์๋ ์์ง๋ง ๊ฐ๊ธ์ ํผํ๋ ๊ฒ์ด ์ข๋ค.
const permissions = title === '๋ถ์ฅ' || title === '๊ณผ์ฅ' ?
title === '๊ณผ์ฅ' ?
['๊ทผ๋ก์๊ฐ', '์ด๊ณผ๊ทผ๋ฌด์น์ธ', '์๋น'] : ['๊ทผ๋ก์๊ฐ', '์ด๊ณผ๊ทผ๋ฌด์น์ธ']
: ['๊ทผ๋ก์๊ฐ'];
- ์์ ๊ฐ์ ์์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ์ค์ฒฉ๋ ์ผํญ ์ฐ์ฐ์๋ ์ ๋๋ก ์ฝ์ ์ ์๊ฒ ๋์๊ณ , ๋จ์ํจ์ด๋ผ๋ ๊ฐ์น๋ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฝ๋๋ฅผ ์์ ํ ๋ธ๋ก ์ธ๋ถ๋ก ๋ถ๋ฆฌํด์ ๋ ๋ฆฝ์ ์ธ ํจ์๋ก ์ด๋์ํจ๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ๊ณผ๋ํ ์ฝ๋์ ๋ํ ์ฐ๋ ค ์์ด
const
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
function getTimePermissions({ title }) {
if(title === '๊ณผ์ฅ') {
return ['๊ทผ๋ก์๊ฐ', '์ด๊ณผ๊ทผ๋ฌด์น์ธ', '์๋น'];
}
if (title === '๋ถ์ฅ') {
return ['๊ทผ๋ก์๊ฐ', '์ด๊ณผ๊ทผ๋ฌด์น์ธ'];
}
return ['๊ทผ๋ก์๊ฐ'];
}
const permissions = getTimePermissions({ title: '์ฌ์' }); // ['๊ทผ๋ก์๊ฐ']
- ์์ ๊ฐ์ด ์ถ์ํ ์์ด ํ ๊ฐ์ง ์์ ๋ง์ ๋ชฉ์ ์ผ๋ก ํ๋ ์งง์ ํจ์๋ฅผ ๋ง๋๋ ๊ฒ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ๋์ง ์๊ณ , ๊นจ๋ํ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ฒซ ๋จ๊ณ์ด๊ธฐ๋ ํ๋ค.
๐ฏ ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ด์ฉํด ํจ์จ์ฑ์ ๊ทน๋ํํ๋ผ.โ
- **๋จ๋ฝ ํ๊ฐ(short circuiting)**์ ๋ชฉ์ ์ ๊ฐ์ฅ ํ๋นํ ์ ๋ณด๋ฅผ ๋จผ์ ์์น์์ผ์ ์ ๋ณด ํ์ธ์ ๊ฑด๋๋ฐ๋ ๊ฒ์ด๋ค.
- ์๋์ ์ฝ๋๋ ์์ด์ฝ ๊ฒฝ๋ก๊ฐ ์ฐธ์ด๋ฉด ํด๋น ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ค.
const icon = {
path: 'acme/bar.png';
}
function getIconPath(icon) {
const path = icon.path ? icon.path : 'uploads/default.png';
return `https://assets.foo.com/${path}`;
}
getIconPath(icon); // 'https://assets.foo.com/acme/bar.png'
- ์ ์ฝ๋๋
icon.path
๊ฐ ๋ ๋ฒ์ด๋ ํ์ธํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ ์ ์๋ค. - ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ธฐ ์ ์ ๋ ผ๋ฆฌ ์ฐ์ฐ์์ ๋์ ์๋ฆฌ๋ฅผ ์ดํด๋ณด์.
||
์ผ๋ก ์์ฑํ๋OR
์ฐ์ฐ์๋ ์ ํ ๊ฐ๋ฅํ ๊ฐ ์ค ํ๋๋ผ๋ true์ด๋ฉด true๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ด๋ค ๊ฐ์ด๋true
๋ฅผ ๋ฐํํ๋ฉด ๋ค๋ฅธ ๊ฐ์ ํ์ธํ ํ์๊ฐ ์์ด์ง๋ค.
const name = 'sa' || 'I have no name';
name; // sa
- ์ด๋ฌํ ๋ฐฉ๋ฒ์ผ๋ก ๋ ๊ฐ๊ฒฐํ๊ฒ ๋ฐ๊ฟ ์ ์๋ค.
function getIconPath(icon) {
const path = icon.path || 'uploads/default.png';
return `https://assets.foo.com/${path}`;
}
- ์ด์ ๋ฐ๋์ ๊ฒฝ์ฐ๋ก
false
๊ฐ ์์ ๋ ํํ์์ ์ค๋จ์์ผ ๋ณด์. - ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ด์ฉํ๋ ๋ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ๋ฐฉ๋ฒ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ๊ฒ์ผ๋ก, ํน๋ณํ ํน์ ์ปฌ๋ ์ ์ ๋ฉ์๋ ๋๋ ๋์์ ์ฌ์ฉํ ๋ ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
// ์ง์ ๋ ๋ฐฐ์ด์ด ์์
const userConfig1 = {
}
// ๋ด์ฉ์ด ์๋ ๋ฐฐ์ด
const userConfig2 = {
images: []
}
// ๋ด์ฉ์ด ์๋ ๋ฐฐ์ด
const userConfig3 = {
images: [
'me.png',
'work.png',
]
}
- ์ํ๋ ๊ฐ์ ๊ฐ์ ธ์ฌ ๋
||
์ฐ์ฐ์๋ก ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ด์ฉํ ๋ ์์ฑ์ด ์ ์๋์ง ์์ ๊ฒฝ์ฐ์๋ ์ ๋๋ก ์๋ํ์ง ์๋๋ค.
const userConfig1 = {
}
const img = userConfig1.images[0] || 'default.png';
// Uncaught TypeError: Cannot read property '0' of undefined
- ์ด ๊ฒฝ์ฐ์๋ ์ฌ๋ฌ ๋ฒ ์ค์ฒฉ๋ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
function getFirstImage(userConfig) {
let img = 'default.png';
if(userConfig.images) {
img = userConfig.images[0];
}
return img;
}
- ํ์ง๋ง ์ ์์ ์ฝ๋์์๋ ๋ฐฐ์ด์ ํญ๋ชฉ์ด ์์ผ๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
const userConfig = {
images: []
}
const img = getFirstImage(userConfig); // undefined
- ์๋์ ๊ฐ์ด ํด๊ฒฐํ ์ ์๋ค.
function getFirstImage(userConfig) {
let img = 'default.png';
if(userConfig.images) {
if(userConfig.images.length){
img = userConfig.images[0];
}
}
return img;
}
- ํ์ง๋ง ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ข์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ๋จ๋ฝ ํ๊ฐ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
function getImage(userConfig) {
if(userConfig.images && userConfig.images.length > 0) {
return userConfig.images[0];
}
return 'default.png';
}
- ๋ง์ง๋ง์ผ๋ก, ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ผํญ ์ฐ์ฐ์์ ์กฐํฉํด์ ํ์ธ ๊ณผ์ ์ ํ ์ค๋ก ์ค์ผ ์ ์๋ค.
function getImage(userConfig) {
const images = userConfig.images;
return images && images.length ? images[0] : 'default.png';
}
- ๋จ๋ฝ ํ๊ฐ๋ฅผ ์ฌ์ฉํด ์ฝ๋๋ฅผ ์ข ๋ ์ฝ๊ธฐ ์ข๊ฒ ๋ง๋ค์. ๊ทธ์ ์ฝ๋๋ฅผ ์ค์ด๊ธฐ ์ํ ์ฉ๋๊ฐ ์๋๋ค.