ìë¹ìì ìë°ì¤í¬ë¦½í¸ ë´ì¥ í¨ìë ì¸ìì ê°ìì ì ì½ì ëì§ ììµëë¤.
ìì:
Math.max(arg1, arg2, ..., argN)â ì¸ì ì¤ ê°ì¥ í° ì를 ë°íí©ëë¤.Object.assign(dest, src1, ..., srcN)âsrc1..Nì íë¡í¼í°ë¥¼destë¡ ë³µì¬í©ëë¤.- 기í ë±ë±
ì´ë² ì±í°ììë ì´ë ê² ììì(ì í´ì§ì§ ìì) ìì ì¸ì를 ë°ë ë°©ë²ì ëí´ ììë³´ê² ìµëë¤. ëí í¨ìì 매ê°ë³ìì ë°°ì´ì ì ë¬íë ë°©ë²ì ëí´ìë ììë³´ê² ìµëë¤.
ëë¨¸ì§ ë§¤ê°ë³ì ...
í¨ì ì ì ë°©ë²ê³¼ ìê´ìì´ í¨ìì ë겨주ë ì¸ìì ê°ìì ì ì½ì´ ììµëë¤.
ìëì ê°ì´ ë§ì´ì£ .
function sum(a, b) {
return a + b;
}
alert( sum(1, 2, 3, 4, 5) );
í¨ì를 ì ìí ë ì¸ì를 ë ê°ë§ ë°ëë¡ íê³ , ì¤ì í¨ì를 í¸ì¶í ë ì´ë³´ë¤ ë ë§ì âì¬ë¶ìâ ì¸ì를 ì ë¬íì§ë§, ìë¬ê° ë°ìíì§ ìììµëë¤. ë¤ë§ ë°í ê°ì ì²ì ë ê°ì ì¸ìë§ì ì¬ì©í´ ê³ì°ë©ëë¤.
ì´ë ê² ì¬ë¶ì 매ê°ë³ìë ê·¸ ê°ë¤ì ë´ì ë°°ì´ ì´ë¦ì ë§ì¹¨í ì¸ ê° ...ë¤ì ë¶ì¬ì£¼ë©´ í¨ì ì ì¸ë¶ì í¬í¨ìí¬ ì ììµëë¤. ì´ë ë§ì¹¨í ì¸ ê° ...ë "ë¨ììë 매ê°ë³ìë¤ì íë° ëª¨ì ë°°ì´ì ì§ì´ë£ì´ë¼."ë ê²ì ì미í©ëë¤.
ìë ìììì 모ë ì¸ìê° ë°°ì´ argsì 모ì
ëë¤.
function sumAll(...args) { // argsë ë°°ì´ì ì´ë¦ì
ëë¤.
let sum = 0;
for (let arg of args) sum += arg;
return sum;
}
alert( sumAll(1) ); // 1
alert( sumAll(1, 2) ); // 3
alert( sumAll(1, 2, 3) ); // 6
ìë¶ë¶ì 매ê°ë³ìë ë³ìë¡, ë¨ììë 매ê°ë³ìë¤ì ë°°ì´ë¡ 모ì ìë ììµëë¤.
ìë ìììì ì²ì ë ì¸ìë ë³ìì, ëë¨¸ì§ ì¸ìë¤ì titlesë¼ë ë°°ì´ì í ë¹ë©ëë¤.
function showName(firstName, lastName, ...titles) {
alert( firstName + ' ' + lastName ); // Bora Lee
// ëë¨¸ì§ ì¸ìë¤ì ë°°ì´ titlesì ììê° ë©ëë¤.
// titles = ["Software Engineer", "Researcher"]
alert( titles[0] ); // Software Engineer
alert( titles[1] ); // Researcher
alert( titles.length ); // 2
}
showName("Bora", "Lee", "Software Engineer", "Researcher");
ëë¨¸ì§ ë§¤ê°ë³ìë ë¨ììë ì¸ì를 모ì¼ë ìí ì íë¯ë¡ ìë ìììì ìë¬ê° ë°ìí©ëë¤.
function f(arg1, ...rest, arg2) { // ...rest íì arg2ê° ìì¼ë©´ ì ë©ëë¤.
// ìë¬
}
...restë íì ë§ì§ë§ì ìì´ì¼ í©ëë¤.
arguments ê°ì²´
ì ì¬ ë°°ì´ ê°ì²´(array-like object)ì¸ arguments를 ì¬ì©íë©´ ì¸ë±ì¤ë¥¼ ì¬ì©í´ ì¸ìì ì ê·¼í ì ììµëë¤.
ìì:
function showName() {
alert( arguments.length );
alert( arguments[0] );
alert( arguments[1] );
// argumentsë ì´í°ë¬ë¸ ê°ì²´ì´ê¸° ë문ì
// for(let arg of arguments) alert(arg); 를 ì¬ì©í´ ì¸ì를 í¼ì¹ ì ììµëë¤.
}
// 2, Bora, Leeê° ì¶ë ¥ë¨
showName("Bora", "Lee");
// 1, Bora, undefinedê° ì¶ë ¥ë¨(ë ë²ì§¸ ì¸ìë ìì)
showName("Bora");
ëë¨¸ì§ ë§¤ê°ë³ìë ë¹êµì ìµì ì ëì¨ ë¬¸ë²ì
ëë¤. ëë¨¸ì§ ë§¤ê°ë³ìê° ëì¤ê¸° ì´ì ì í¨ìì ì¸ì ì 체를 ì»ì´ë´ë ë°©ë²ì´ arguments를 ì¬ì©íë ê²ë°ì ìììµëë¤. ë¬¼ë¡ ì§ê¸ë arguments를 ì¬ì©í ì ììµëë¤. ì¤ëë ì½ë를 ë³´ë¤ ë³´ë©´ arguments를 ë§ëê² ëì£ .
argumentsë ì ì¬ ë°°ì´ ê°ì²´ì´ë©´ì ì´í°ë¬ë¸(ë°ë³µ ê°ë¥í) ê°ì²´ì
ëë¤. ì´ì¨ë ë°°ì´ì ìëì£ . ë°ë¼ì ë°°ì´ ë©ìë를 ì¬ì©í ì ìë¤ë ë¨ì ì´ ììµëë¤. arguments.map (...)ì í¸ì¶í ì ìì£ .
ì¬ê¸°ì ëíì¬ argumentsë ì¸ì ì 체를 ë´ê¸° ë문ì ëë¨¸ì§ ë§¤ê°ë³ìì²ë¼ ì¸ìì ì¼ë¶ë§ ì¬ì©í ì ìë¤ë ë¨ì ë ììµëë¤.
ë°ë¼ì ë°°ì´ ë©ìë를 ì¬ì©íê±°ë ì¸ì ì¼ë¶ë§ ì¬ì©í ëë ëë¨¸ì§ ë§¤ê°ë³ì를 ì¬ì©íëê² ì¢ìµëë¤.
arguments ê°ì²´ë¥¼ ì§ìíì§ ììµëë¤.íì´í í¨ììì arguments ê°ì²´ì ì ê·¼íë©´, ì¸ë¶ì ìë âì¼ë°â í¨ìì arguments ê°ì²´ë¥¼ ê°ì ¸ìµëë¤.
ìì:
function f() {
let showArg = () => alert(arguments[0]);
showArg();
}
f(1); // 1
ìì ë°°ì´ ë°ì ê°ì´ íì´í í¨ìë ìì²´ this를 ê°ì§ì§ ììµëë¤. ì¬ê¸°ì ëíì¬ ì ìì를 íµí´ íì´í í¨ìë arguments ê°ì²´ë¥¼ ì§ìíì§ ìëë¤ë ê²ì íì¸í´ ë³´ììµëë¤.
ì¤íë ë 문ë²
ì§ê¸ê¹ì§ 매ê°ë³ì 목ë¡ì ë°°ì´ë¡ ê°ì ¸ì¤ë ë°©ë²ì ëí´ ì´í´ë³´ììµëë¤.
ê·¸ë°ë° ê°ë°ì íë¤ ë³´ë©´ ë°ëëë 기ë¥ì´ íìí ëê° ìê¹ëë¤. ë°°ì´ì íµì§¸ë¡ 매ê°ë³ìì ë겨주ë ê² ê°ì´ ë§ì´ì£ .
ìì를 íµí´ ì´ë° ê²½ì°ë¥¼ ì´í´ë´ ìë¤. ë´ì¥ í¨ì Math.maxë ì¸ìë¡ ë°ì ì«ì ì¤ ê°ì¥ í° ì«ì를 ë°íí©ëë¤.
alert( Math.max(3, 5, 1) ); // 5
ë°°ì´ [3, 5, 1]ì´ ìê³ , ì´ ë°°ì´ì ëìì¼ë¡ Math.max를 í¸ì¶íê³ ì¶ë¤ê³ ê°ì í´ë´
ìë¤.
ìë¬´ë° ì¡°ì ìì´ ë°°ì´ì âìë ê·¸ëë¡â Math.maxì ë기면 ìíë ëë¡ ëìíì§ ììµëë¤. Math.maxë ë°°ì´ì´ ìë ì«ì 목ë¡ì ì¸ìë¡ ë°ê¸° ë문ì
ëë¤.
let arr = [3, 5, 1];
alert( Math.max(arr) ); // NaN
Math.max (arr[0], arr[1], arr[2]) ì²ë¼ ë°°ì´ ìì를 ìëì¼ë¡ ëì´íë ë°©ë²ë ì긴 íë°, ë°°ì´ ê¸¸ì´ë¥¼ ì ì ìì ëë ì´ë§ì ë ë¶ê°ë¥í©ëë¤. ì¤í¬ë¦½í¸ê° ëìê° ë ì¤ì ëì´ì¤ë ë°°ì´ì 길ì´ë ì주 길 ìë ìê³ , ìì ë¹ ë°°ì´ì¼ ìë ì기 ë문ì
ëë¤. ìëì¼ë¡ ì´ê±¸ ë¤ ì²ë¦¬íë¤ ë³´ë©´ ì½ëê° ì§ì ë¶í´ì§ê² ì£ .
ì ê° êµ¬ë¬¸(spread syntax, ì¤íë ë 구문) ì ì´ë´ ë ì¬ì©í기 ìí´ ë§ë¤ì´ì¡ìµëë¤. ...를 ì¬ì©í기 ë문ì ëë¨¸ì§ ë§¤ê°ë³ìì ë¹ì·í´ ë³´ì´ì§ë§, ì ê° êµ¬ë¬¸ì ëë¨¸ì§ ë§¤ê°ë³ìì ë°ë ìí ì í©ëë¤.
í¨ì를 í¸ì¶í ë ...arr를 ì¬ì©íë©´, ì´í°ë¬ë¸ ê°ì²´ arrì´ ì¸ì 목ë¡ì¼ë¡ 'íì¥âë©ëë¤.
Math.max를 ì¬ì©í ììë¡ ë¤ì ëìê° ë´
ìë¤.
let arr = [3, 5, 1];
alert( Math.max(...arr) ); // 5 (ì ê° êµ¬ë¬¸ì´ ë°°ì´ì ì¸ì 목ë¡ì¼ë¡ ë°ê¿ì£¼ììµëë¤.)
ìëì ê°ì´ ì´í°ë¬ë¸ ê°ì²´ ì¬ë¬ ê°ë¥¼ ì ë¬íë ê²ë ê°ë¥í©ëë¤.
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
alert( Math.max(...arr1, ...arr2) ); // 8
ì¤íë ë 문ë²ì íë²í ê°ê³¼ í¼í©í´ ì¬ì©íë ê²ë ê°ë¥íì£ .
let arr1 = [1, -2, 3, 4];
let arr2 = [8, 3, -8, 1];
alert( Math.max(1, ...arr1, 2, ...arr2, 25) ); // 25
ì ê° êµ¬ë¬¸ì ë°°ì´ì í©ì¹ ëë íì©í ì ììµëë¤.
let arr = [3, 5, 1];
let arr2 = [8, 9, 15];
let merged = [0, ...arr, 2, ...arr2];
alert(merged); // 0,3,5,1,2,8,9,15 (0, arr, 2, arr2 ììë¡ í©ì³ì§ëë¤.)
ìì ììë¤ìì 'ë°°ì´âì ëìì¼ë¡ ì ê° êµ¬ë¬¸ì´ ì´ë»ê² ëìíëì§ ì´í´ë³´ììµëë¤. ê·¸ë°ë° ë°°ì´ì´ ìëëë¼ë ì´í°ë¬ë¸ ê°ì²´ì´ë©´ ì ê° êµ¬ë¬¸ì ì¬ì©í ì ììµëë¤.
ì¤íë ë 문ë²ì ì¬ì©í´ 문ìì´ì 문ì ë°°ì´ë¡ ë³í ìì¼ ë³´ê² ìµëë¤.
let str = "Hello";
alert( [...str] ); // H,e,l,l,o
ì ê° êµ¬ë¬¸ì for..ofì ê°ì ë°©ìì¼ë¡ ë´ë¶ìì ì´í°ë ì´í°(iterator, ë°ë³µì)를 ì¬ì©í´ ìì를 ìì§í©ëë¤.
문ìì´ì for..of를 ì¬ì©íë©´ 문ìì´ì 구ì±íë 문ìê° ë°íë©ëë¤. ...strë H,e,l,l,oê° ëëë°, ì´ ë¬¸ì 목ë¡ì ë°°ì´ ì´ê¸°ì(array initializer) [...str]ë¡ ì ë¬ë©ëë¤.
ë©ìë Array.fromì ì´í°ë¬ë¸ ê°ì²´ì¸ 문ìì´ì ë°°ì´ë¡ ë°ê¿ì£¼ê¸° ë문ì Array.fromì ì¬ì©í´ë ëì¼í ìì
ì í ì ììµëë¤.
let str = "Hello";
// Array.fromì ì´í°ë¬ë¸ì ë°°ì´ë¡ ë°ê¿ì¤ëë¤.
alert( Array.from(str) ); // H,e,l,l,o
[...str]ê³¼ ëì¼í ê²°ê³¼ê° ì¶ë ¥ëë ê²ì íì¸í ì ìë¤ì.
ê·¸ë°ë° Array.from(obj)ì [...obj]ë ë¤ìê³¼ ê°ì 미ë¬í ì°¨ì´ê° ììµëë¤.
Array.fromì ì ì¬ ë°°ì´ ê°ì²´ì ì´í°ë¬ë¸ ê°ì²´ ë ë¤ì ì¬ì©í ì ììµëë¤.- ì¤íë ë 문ë²ì ì´í°ë¬ë¸ ê°ì²´ìë§ ì¬ì©í ì ììµëë¤.
ì´ë° ì´ì ë문ì 무ì¸ê°ë¥¼ ë°°ì´ë¡ ë°ê¿ ëë ì ê° êµ¬ë¬¸ë³´ë¤ Array.fromì´ ë³´í¸ì ì¼ë¡ ì¬ì©ë©ëë¤.
ë°°ì´ê³¼ ê°ì²´ì ë³µì¬ë³¸ ë§ë¤ê¸°
참조ì ìí ê°ì²´ ë³µì¬ ì±í°ìì Object.assign()ì ì¬ì©í´ ê°ì²´ë¥¼ ë³µì¬í ìì를 ë ì¬ë ¤ë´
ìë¤.
Object.assign() ë§ê³ ë ì¤íë ë 문ë²ì ì¬ì©íë©´ ë°°ì´ê³¼ ê°ì²´ë¥¼ ë³µì¬í ì ììµëë¤.
let arr = [1, 2, 3];
let arrCopy = [...arr]; // ë°°ì´ì í¼ì³ì ê° ìì를 ë¶ë¦¬í, 매ê°ë³ì 목ë¡ì¼ë¡ ë§ë ë¤ìì
// 매ê°ë³ì 목ë¡ì ìë¡ì´ ë°°ì´ì í ë¹í¨
// ë°°ì´ ë³µì¬ë³¸ì ììê° ê¸°ì¡´ ë°°ì´ ììì ì§ì§ ê°ìê¹ì?
alert(JSON.stringify(arr) === JSON.stringify(arrCopy)); // true
// ë ë°°ì´ì ê°ìê¹ì?
alert(arr === arrCopy); // false (ì°¸ì¡°ê° ë¤ë¦)
// ì°¸ì¡°ê° ë¤ë¥´ë¯ë¡ 기존 ë°°ì´ì ìì í´ë ë³µì¬ë³¸ì ìí¥ì ë°ì§ ììµëë¤.
arr.push(4);
alert(arr); // 1, 2, 3, 4
alert(arrCopy); // 1, 2, 3
ì´ë²ì ê°ì²´ë¥¼ ë³µì¬íë ìì를 ì´í´ë³´ê² ìµëë¤.
let obj = { a: 1, b: 2, c: 3 };
let objCopy = { ...obj }; // ê°ì²´ë¥¼ í¼ì³ì ê° ìì를 ë¶ë¦¬í, 매ê°ë³ì 목ë¡ì¼ë¡ ë§ë ë¤ìì
// 매ê°ë³ì 목ë¡ì ìë¡ì´ ê°ì²´ì í ë¹í¨
// ê°ì²´ ë³µì¬ë³¸ì íë¡í¼í°ë¤ì´ 기존 ê°ì²´ì íë¡í¼í°ë¤ê³¼ ì§ì§ ê°ìê¹ì?
alert(JSON.stringify(obj) === JSON.stringify(objCopy)); // true
// ë ê°ì²´ë ê°ìê¹ì?
alert(obj === objCopy); // false (ì°¸ì¡°ê° ë¤ë¦)
// ì°¸ì¡°ê° ë¤ë¥´ë¯ë¡ 기존 ê°ì²´ë¥¼ ìì í´ë ë³µì¬ë³¸ì ìí¥ì ë°ì§ ììµëë¤.
obj.d = 4;
alert(JSON.stringify(obj)); // {"a":1,"b":2,"c":3,"d":4}
alert(JSON.stringify(objCopy)); // {"a":1,"b":2,"c":3}
ì´ë ê² ì ê° êµ¬ë¬¸ì ì¬ì©íë©´ let objCopy = Object.assign({}, obj);, let arrCopy = Object.assign([], arr);ë³´ë¤ ë ì§§ì ì½ëë¡ ë°°ì´ì´ë ê°ì²´ë¥¼ ë³µì¬í ì ìì´ì ì¬ëë¤ì ì´ ë°©ë²ì ì í¸í©ëë¤.
ìì½
"..."ì ëë¨¸ì§ ë§¤ê°ë³ìë ì¤íë ë 문ë²ì¼ë¡ ì¬ì©í ì ììµëë¤.
ëë¨¸ì§ ë§¤ê°ë³ìì ì ê° êµ¬ë¬¸ì ìëì ë°©ë²ì¼ë¡ 구ë¶í ì ììµëë¤.
...ì´ í¨ì 매ê°ë³ìì ëì ìì¼ë©´ ì¸ì 목ë¡ì ë머ì§ë¥¼ ë°°ì´ë¡ 모ì주ë 'ëë¨¸ì§ ë§¤ê°ë³ìâì ëë¤....ì´ í¨ì í¸ì¶ ì ì¬ì©ëê±°ë 기í ê²½ì°ì ë°°ì´ì 목ë¡ì¼ë¡ íì¥í´ì£¼ë 'ì¤íë ë 문ë²âì ëë¤.
ì¬ì© í¨í´:
- ì¸ì ê°ìì ì íì´ ìë í¨ì를 ë§ë¤ ë ëë¨¸ì§ ë§¤ê°ë³ì를 ì¬ì©í©ëë¤.
- ë¤ìì ì¸ì를 ë°ë í¨ìì ë°°ì´ì ì ë¬í ë ì ê° êµ¬ë¬¸ì ì¬ì©í©ëë¤.
ëì í¨ê» ì¬ì©íë©´ 매ê°ë³ì 목ë¡ê³¼ ë°°ì´ ê° ì íì ì½ê² í ì ììµëë¤.
ì¡°ê¸ ì¤ëë ë°©ë²ì´ê¸´ íì§ë§ argumentsë¼ë ë°ë³µ ê°ë¥í(ì´í°ë¬ë¸) ì ì¬ ë°°ì´ ê°ì²´ë¥¼ ì¬ì©í´ë ì¸ì 모ë를 ì¬ì©í ì ììµëë¤.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.