ES6 - JeongWu/fe-javascript GitHub Wiki
Overview
ECMAScript
Javascript์ ๊ฐ์ ์คํฌ๋ฆฝํธ ์ธ์ด์ ํ์ค
Javascript ํน์ง
1. ๋์จํ ํ์ ์ธ์ด -> ๋์ ํ์ ๊ฒ์ฌ
- runtime์์ ์๋ฃํ์ด ๊ฒฐ์
- ์์์ ํ๋ณํ
ex)1 + "2" // "12"
2. ๊ฐ์ฒด ๊ธฐ๋ฐ์ ์ธ์ด
- ํ๋กํ ํ์ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ
- es6 ๋ถํฐ class๋ก ๊ตฌํ ๊ฐ๋ฅ
3. ์ผ๊ธ ํจ์ ์ง์
- ๋ณ์, ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ๋ด์ ์ ์์
var two=function(){
return 2;
}
- ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๊ฐ๋ฅ
var caller= function(f){
return f();
}
caller(two);
- ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
var f= function(){ return two; }
4. ๊ณ ์ฐจํจ์ ๊ฐ๋ฅ
ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ๋ฐํํจ์ผ๋ก์จ ์๋ํ๋ ํจ์
const arr1=[1,2,3];
const arr2=[];
for(let i=0;i<arr1.length;i++){
arr2.push(arr[i]*2);
}
console.log(arr2);
const arr1=[1,2,3];
const arr2=arr.map(function(item){
return item*2;
});
console.log(arr2);
Default parameter, Rest parameter, Spread Operator
1. Default Parameter(๊ธฐ๋ณธ ๋งค๊ฐ๋ณ์)
: ํจ์ ํธ์ถ ์ ํจ์์ ๋งค๊ฐ๋ณ์ ๊ฐ์ด ์๊ฑฐ๋ undefined๊ฐ ์ ๋ฌ ๋ ๊ฒฝ์ฐ ๋งค๊ฐ๋ณ์๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ด๊ธฐํ
function multiply(a,b){
var b=typeof b!=='undefined' ? b:1;
return a*b;
}
function multiply(a,b=1){ //es6
return a*b;
}
multiply(5);
2. Rest parameter(๋๋จธ์ง ๋งค๊ฐ๋ณ์)
: ์ ํด์ง์ง ์์ ์ธ์๋ค์ ๋ฐฐ์ด๋ก ๋ํ๋
function f(x,y) {
var a=Array.prototype.slice.call(arguments,2)
return (x+y) * a.length;
}
f(1,2,"hello",true,7); // 9
- ES6
ES6
function f(x,y,...a) {
return (x+y) * a.length;
}
f(1,2,"hello",true,7); // 9
์ฐจ์ด์
- arguments: ํจ์์ ์ ๋ฌ๋๋ ๋ชจ๋ ์ธ์ ํฌํจ
์ค์ ๋ฐฐ์ด์ด ์๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด ๋ฉ์๋ ์ฌ์ฉ ๋ถ๊ฐ- ๋๋จธ์ง ๋งค๊ฐ๋ณ์: ๊ฐ๋ณ ์ด๋ฆ์ด ์ฃผ์ด์ง์ง ์์ ์ธ์ ํฌํจ
๋ฐฐ์ด์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด ๋ฉ์๋ ์ ์ฉ ๊ฐ๋ฅ
3. Spread Operator (์ ๊ฐ ์ฐ์ฐ์)
๋ฐ๋ณต ๊ฐ๋ฅํ ๋ฌธ์๋ฅผ ์ฌ๋ฌ๊ฐ์ ์ธ์, ์์๋ก ํ์ฅ์ํฌ ์ ์์
- ํจ์ ํธ์ถ์ฉ
function sum(x,y,z){
return x+y+z;
}
var numbers=[1,2,3];
sum.apply(null,numbers); //ES5
sum(...numbers); //ES6
- ๋ฐฐ์ด literal์ฉ (push, slice, concat X)
var parts=['shoulders','knees'];
var lyrics=['head',...parts,'and','toes'];
lyrics; //['head','shoulders','knees','and','toes']
- ๋น๊ตฌ์กฐํ ํ ๋น์ฉ
[a,b,...iterableObj]=[1,2,3,4,5];
Template Literals
literal: ์ฝ๋ ์์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐฉ์
template literals
- backtick(`) ์ฌ์ฉ
- $์ {}๋ฅผ ์ด์ฉํ์ฌ ํํ์ ๋ฃ์ ์ ์์
var a=5;
var b=10;
"Fifteen is "+(a+b)+" and\nnot "+(2*a+b)+"."; //ES5
`Fifteen is ${a+b} and
not ${2 * a + b}.` //ES6
let const
let
- ์ ์ธ๊ณผ ๋์์ ์์์ ๊ฐ์ผ๋ก ์ด๊ธฐํ ๊ฐ๋ฅ but ์ฌ์ ์ธ์ ๋ถ๊ฐ
let a=1;
a=2; //์ฌํ ๋น์ ๊ฐ๋ฅ
let a=4;//๋ถ๊ฐ
- ๋ธ๋ก ์ ํจ ๋ฒ์๋ฅผ ๊ฐ๋ ์ง์ญ ๋ณ์
if(true){
var a=10;
}
a; //10
if(true){
let a=10;
}
a; //ReferenceError undefined
console.log(b); //undefined์ด์ง๋ง error ๋ฐ์ x
var b='test';
console.log(c);//undefined error๋ฐ์
let c='test';
var b;
console.log(b); //undefined
b='test';
console.log(c);
let c='test'; //undefined error๋ฐ์
const
์ฌํ ๋น ์ฌ์ ์ธ ๋ถ๊ฐ-> ์ ์ธ๊ณผ ๋์์ ๊ฐ ํ ๋นํด์ค์ผํจ.
const arr=[];
arr.push(4);
arr=arr.concat([5,6]);//์ฌํ ๋น์ด๋จ ์ค๋ฅ
Destructuring assignment
๊ตฌ์กฐ ๋ถํด ํ ๋น
๋ฐฐ์ด์ด๋ ๊ฐ์ฒด์ ์์ฑ์ ํด์ฒดํ์ฌ ๊ทธ ๊ฐ์ ๊ฐ๋ณ ๋ณ์์ ๋ด์ ์ ์๊ฒ ํ๋ ํํ์
- ๋ฐฐ์ด ๊ตฌ์กฐ ๋ถํด ํ ๋น
var foo=["one","two","three"];
var[a,b,c]=foo;
console.log(a); //"one"
console.log(b); //"two"
console.log(c); //"three"
var a,b,rest;
[a,b]=[10,20];
console.log(a,b); //10 20
[a,b,...rest]=[10,20,30,40,50];
console.log(a,b); //10,20
console.log(rest); //[30,40,50]
- ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถํด ํ ๋น
var o={p:42, q:true};
var {p,q}=o;
console.log(p,q) //42, true
let {a,b,...rest}={a:10,b:20,c:30,d:40};
console.log(a,b); //10, 20
console.log(rest); //{c:30, d:40}