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}