JavaScript Koans ๊ณผ์ ๋ฅผ ์ํํ๋ฉด์ ์ ๋๋ก ์ ๋ฆฌ๋์ง ์์๋ ๊ฐ๋ ๋ค์ ๋ค์ ์ ๋ฆฌํด๋ณธ๋ค.
์ฐธ์กฐ ์๋ฃํ์ ์ฃผ์๊ฐ์ด ์ ์ฅ๋๋ค.
์์ ์๋ฃํ๊ณผ์ ์ฐจ์ด์ ๊ดํ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๊ฐ๋ ์ด ์์ถฉ๋์ด ์ดํด๊ฐ ๊ฐ์ง ์์๋ ๋ถ๋ถ.
์ฐธ์กฐ ์๋ฃํ์ ๊ฐ์ ์ฃผ์๊ฐ์ ๊ฐ๊ณ ์๋ ๊ฒฝ์ฐ ์๋ณธ ๋๋ ๋ณต์ ๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ๊ฐ์ด ๋ฌ๋ผ์ก์ ๋ ๊ฐ์ด ํจ๊ป ๋ฌ๋ผ์ง๋ค!!
โ๏ธ ์๋ณธ ์ฐธ์กฐ ์๋ฃํ๊ณผ ๋ณต์ ์ฐธ์กฐ ์๋ฃํ์ ๋์ผํ ์ฃผ์๊ฐ์ ์ฃผ๋ ๊ฒฝ์ฐ
์ฐธ์กฐ ์๋ฃํ ์ ์ธ ํ ์๋ก์ด ๋ณ์์ ์ฐธ์กฐ ์๋ฃํ์ ์ ์ธํ๋ ๋ณ์๋ฅผ ํ ๋นํ๋ค
/* 06 Types part2 */
const overTwenty = ['hongsik', 'minchul', 'hoyong'];
let allowedToDrink = overTwenty;
overTwenty.push('san');
console.log(allowedToDrink); // ['hongsik', 'minchul', 'hoyong', 'san']
// overTwenty์ allowedToDrink๋ ์ฃผ์๊ฐ์ด ๋์ผํ๋ค!
overTwenty[1] = 'chanyoung';
console.log(allowedToDrink[1]); // 'chanyoung'
// overTwenty์ allowedToDrink๋ ์ฃผ์๊ฐ์ด ๋์ผํ๋ค!
/* 06 Types part2 */
const person = {
son: {
age: 9,
},
};
const boy = person.son;
boy.age = 20;
console.log(person.son.age); // 20
// boy์ person.son์ ๊ฐ์ ์ฃผ์๊ฐ์ด ๋์ผํ๋ค!
โ๏ธ ์๋ณธ ์ฐธ์กฐ ์๋ฃํ๊ณผ ๋ณต์ ์ฐธ์กฐ ์๋ฃํ์ ๋ค๋ฅธ ์ฃผ์๊ฐ์ ์ฃผ๋ ๊ฒฝ์ฐ
๋ฐฐ์ด ๋ฉ์๋ ๋ฑ์ ์ด์ฉํ๋ค. (assign
, slice
๋ฑ...)
/* 08 Object */
const obj = {
mastermind: 'Joker',
henchwoman: 'Harley',
relations: ['Anarky', 'Duela Dent', 'Lucy'],
twins: {
'Jared Leto': 'Suicide Squad',
'Joaquin Phoenix': 'Joker',
'Heath Ledger': 'The Dark Knight',
'Jack Nicholson': 'Tim Burton Batman',
},
};
function passedByReference(refObj) {
refObj.henchwoman = 'Adam West';
}
์์ ๊ฐ์ ๊ฐ์ฒด์ ํจ์๊ฐ ์๋ค๊ณ ํ ๋...
passedByReference(obj);
console.log(obj.henchwoman); // 'Adam West'
ํจ์๋ฅผ ์คํํ๋ฉด obj์ henchwoman ๊ฐ์ 'Adam West'๊ฐ ๋๋ค!
const copiedObj = Object.assign({}, obj);
copiedObj.mastermind = 'James Wood';
console.log(obj.mastermind); // 'Joker'
obj.henchwoman = 'Harley';
console.log(copiedObj.henchwoman); // 'Adam West'
๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๋ assign ๋ฉ์๋๋ฅผ ์ด์ฉํด copiedObj๋ฅผ ๋ง๋ค์ด ์ฃผ์๋๋ฐ, ์ด๊ฒ์ obj์ ๋ค๋ฅธ ์ฃผ์๊ฐ์ ๊ฐ๊ฒ ๋๋ค.
const copiedObj = obj;
์๋ค๋ฉด ๊ฐ์ ์ฃผ์๊ฐ์ ๊ฐ๊ณ ์์์ ๊ฒ!
๋ค๋ฅธ ์ฃผ์๊ฐ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ copiedObj์ mastermind ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ์ด๋ obj ๊ฐ์ฒด์๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ค.
๋ฐ๋ผ์ obj.mastermind
๋ 'Joker'๊ฐ ์ถ๋ ฅ!
๋ง์ฐฌ๊ฐ์ง๋ก obj์ copiedObj๋ ๋ค๋ฅธ ์ฃผ์๊ฐ์ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ obj๋ฅผ ๋ณ๊ฒฝํด๋ copiedObj์๋ ์ํฅ์ ์ฃผ์ง ๋ชปํ๋ค.
๋ฐ๋ผ์ copiedObj.henchwoman
์ ์ฒ์ assign ํ์ ๋์ ๊ฐ์ธ 'Adam West' ์ถ๋ ฅ.
/* 07 Array */
const arr = ['zero', 'one', 'two', 'three', 'four', 'five'];
function passedByReference(refArr) {
refArr[1] = 'changed in function';
}
passedByReference(arr); // ['zero', 'changed in function', 'two', 'three', 'four', 'five']
๋ฐฐ์ด์ ์ ์ธํ๊ณ ํจ์๋ฅผ ์ ์ธํ์ฌ ํธ์ถํ์ ๋, ํจ์์ ์ํด arr์ ์์ ๊ฐ์ด ๋ณํ๋ค.
const assignedArr = arr;
assignedArr[5] = 'changed in assignedArr';
console.log(arr[5]); // 'changed in assignedArr'
const copiedArr = arr.slice();
copiedArr[3] = 'changed in copiedArr';
console.log(arr[3]); // 'three'
assignedArr์๋ arr์ ์ฃผ์๊ฐ์ ๋ฐ๋ก ํ ๋นํด์ฃผ์๊ธฐ ๋๋ฌธ์ assignedArr์ ๊ฐ์ด ๋ฌ๋ผ์ง๋ฉด arr์ ๊ฐ ๋ํ ๋ฌ๋ผ์ง๋ค.
๊ทธ๋ฌ๋ copiedArr์ slice
๋ฉ์๋๋ฅผ ์ด์ฉํด ๋ด์ฉ์ ๊ฐ์ง๋ง ์ฃผ์๊ฐ์ ๋ค๋ฅด๊ฒ ํ ๋นํด์ค ๋ฐฐ์ด์ด๋ค!
๋ฐ๋ผ์ copiedArr์ ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ์ด๋ arr์๋ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฏ๋ก 'three'๊ฐ ์ถ๋ ฅ๋๋ค.
repeat ๋ฉ์๋
string์ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ก, ๋ฌธ์์ด์ ์ฃผ์ด์ง ํ์๋งํผ ๋ฐ๋ณตํ๋ค.
/* 08 Object */
const megalomaniac = {
mastermind: 'Brain',
henchman: 'Pinky',
getFusion: function () {
return this.henchman + this.mastermind;
},
battleCry(numOfBrains) {
return `They are ${this.henchman} and the` + ` ${this.mastermind}`.repeat(numOfBrains);
},
};
megalomaniac์ด๋ผ๋ ๊ฐ์ฒด๊ฐ ์ ์ธ๋์ด ์๋๋ฐ... ์ ๋ณด๋ฉด ๊ทธ ์์ battleCry๋ผ๋ ํจ์๊ฐ ๋ ์ ์ธ๋์ด ์๊ณ battleCry๋ string์ ๋ฆฌํดํ๋ค.
battleCry๊ฐ ๋ฆฌํดํ๋ ๊ฒ ์ค์... ` ${this.mastermind}`.repeat(numOfBrains)
์ด ๋ถ๋ถ ๋๋ฌด ๋นํฉ์ค๋ฌ์ ๋ค.. ใ
ใ
ใ
ใ
ใ
repeat
,, ๋ฉ์๋ ๊ฐ๊ธดํ๊ณ .. ๋ฐ๋ณตํ๋ ๋ฉ์๋ ๊ฐ๊ธดํ๋ฐ..
console.log(megalomaniac.battleCry(3)); // 'They are Pinky and the Brain Brain Brain'
๋ง์ฝ ์์ ํจ์๋ฅผ ์คํํ๋ฉด They are Pinky and the BrainBrainBrain์ด ์ถ๋ ฅ๋๋๊ฑธ๊น?
๋ผ๊ณ ์๊ฐํ์ง๋ง repeat
๊ฐ ์ ์ฉ๋ ์คํธ๋ง์ ` ${this.mastermind}`
์ด๊ธฐ ๋๋ฌธ์ ์์ ๊ณต๋ฐฑ๊น์ง ํจ๊ป ์ถ๋ ฅํ๋ค!
๋ฐ๋ผ์ ์ ๋ต์ 'They are Pinky and the Brain Brain Brain'
.
arguments ๊ฐ์ฒด
/* 09 SpreadSyntax */
function getAllParamsByArgumentsObj() {
return arguments;
}
์ ํจ์๋ฅผ ์ฒ์ ๋ดค์ ๋.... ๊ตณ์ด๋ฒ๋ ธ๋ค ใ ใ ใ
return arguments๊ฐ ๋ญ๋ฐ...?
MDN arguments MDN์์ ์ค๋ช ํ๊ณ ์๋ arguments..
๊ฐ๋จํ๊ฒ ๊ฒฐ๋ก ๋ง ๋งํ์๋ฉด arguments
๋ JS ๋ด์์ ์ ๊ณตํ๋(?) ๋ฐฐ์ด๊ณผ ๋น์ทํ์ง๋ง ๋ฐฐ์ด์ ์๋ ๊ฐ์ฒด์ด๋ค!(?)
์ธ์๋ฅผ ์ ๋ฌ ๋ฐ์์ ๊ฐ์ฒด๋ก ๋ฐํํด์ค๋ค.
๋ฐฐ์ด๊ณผ ๋น์ทํ๊ธฐ ๋๋ฌธ์ length
ํ๋กํผํฐ๋ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ง ๊ทธ ์ธ์ ๋ฐฐ์ด ์์ฑ ๋ฉ์๋๋ ์ฌ์ฉํ์ง ๋ชปํ๋ค๊ณ ..ํ๋ ๊ฒ ๊ฐ๋ค..
์ด๋ค ๋ฐฐ์ด์ ์์ฑ๋ ์์ง๋ง ๋ ๋ฐฐ์ด๊ณผ ๋น์ทํ๊ธฐ๋ ํด์ Array.from()
๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ๋ฐฐ์ด๋ก ๋ฐํํ ์ ์๋ค๊ณ ํ๋ค..
const argumentsObj = getAllParamsByArgumentsObj('first', 'second', 'third');
console.log(Object.keys(argumentsObj)); // ['0', '1', '2']
console.log(Object.values(argumentsObj)); // ['first', 'second', 'third']
์์ ๊ฐ์ด ์ธ์๋ฅผ ์ ๋ฌ๋ฐ์์ ๋ณ์์ ํ ๋นํด์ฃผ๋ฉด ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ค. ์ผ๋จ์ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ key
์ value
๋ฅผ ๋ฝ์๋ผ ์ ์๋ค๋ ์
value
๋ ์ ๋ฌ ๋ฐ์ ์ธ์์ด์ง๋ง key
๋ ์๋ง.. arguments
๊ฐ ์์ฒด์ ์ผ๋ก 0๋ถํฐ ๋ฒํธ๋ฅผ ๋งค๊ธฐ๋ ๊ฒ์ด ์๋๊ฐ ์ถ๋ค.
console.log(Array.isArray(argumentsObj)); // false
const argsArr = Array.from(argumentsObj);
console.log(Array.isArray(argsArr)); // true
console.log(argsArr); // ['first', 'second', 'third']
๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ Array.isArray()
๋ก ํ๋ณํ์ ์๋ false
๊ฐ ์ถ๋ ฅ๋๊ณ ,
Array.from()
์ผ๋ก ์ง์ง ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ฃผ๋ฉด.. Array.isArray()
๊ฐ true
๊ฐ ๋๋ค~
๊ฐ์ key
๊ฐ ์ฌ๋ผ์ง value
๋ง ์กด์ฌ..
์ฝ์ง๋ง์ ์์ ๊ณผ์ ์๋ค.. ๋จธ๋ฆฌ ์์์ ๊ฐ๋ ์ด ๋๋ฌด ๋ค์ฃฝ๋ฐ์ฃฝ ์์ฌ์๋ค๋ ๊ฒ์ ๋ฐ์ฆํ๋ ์๊ฐ ใ ใ ..
JavaScript Koans๋ ๋์ ๊ณ ํต์ ํ์ ๊ณผ ํจ๊ป ๋ง๋ฌด๋ฆฌ~
'๐ Study > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ํด๋์ค์ ์ธ์คํด์ค (0) | 2022.09.21 |
---|---|
[JS] ์์ ์๋ฃํ๊ณผ ์ฐธ์กฐ ์๋ฃํ (0) | 2022.09.21 |
[JS] ํ์ (0) | 2022.09.21 |
[JS] Math ๊ฐ์ฒด (0) | 2022.08.23 |
[JS] let๊ณผ const์ ์ฐจ์ด์ (0) | 2022.08.22 |