๐ถ ES๋?
- ES(ECMAScript)๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์คํ ํ๊ธฐ ์ํด ๋ง๋ค์ด์ง, ECMA-262 ๊ธฐ์ ๊ท๊ฒฉ์ ๋ฐ๋ผ ์ ์ํ๊ณ ์๋ ํ์คํ๋ ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ค.
ECMAScript๋ ์คํฌ๋ฆฝํ
์ธ์ด๋ฅผ ๋ง๋๋ ๊ท์น์ ์์ฑํ ๊ฒ, ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด์ ๊ฐ์ ๊ท๊ฒฉ์ ๋ฐํ์ผ๋ก ๋ง๋ค์ด์ง ์ธ์ด์ด๋ค.
ECMAScript์ ๊ท์น์ ๊ธฐ๋ฐ์ผ๋กํด์ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ๋ค์ํ ์ธ์ด๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ ๊ฒ์ด๋ค.
ES6์ 9๊ฐ์ง ๊ธฐ๋ฅ
var link = function (height, color, url) {
var height = height || 50
var color = color || 'red'
...
}
var link = function(height = 50, color = 'red', url = 'http://azat.co') {
...
}
๋จ, ์ฃผ์ํด์ผ ํ ์ ์ด ์๋ค. ์ธ์๊ฐ์ผ๋ก 0 ๋๋ false๊ฐ ์
๋ ฅ๋ ๋ ๋ ์์์ ๊ฒฐ๊ณผ๋ ๋ค๋ฅด๋ค.
ES5์์๋ || ์ฒ๋ฆฌ ์ 0 ๋๋ false ๊ฐ์ด ์
๋ ฅ ๋์ด๋ ๊ฑฐ์ง์ด ๋๋ฏ๋ก ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋์ฒด๋๋ค.
ํ์ง๋ง ES6์ ๊ธฐ๋ณธ ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด undefined ๋ฅผ ์ ์ธํ ์
๋ ฅ๋ ๋ชจ๋ ๊ฐ(0, false, null ๋ฑ)์ ์ธ์ ํ๋ค.
// befor
var name = 'Your name is ' + first + ' ' + last + '.'
//after
var name = `Your name is ${first} ${last}.`
// "`" (back-ticked) ๋ฌธ์์ด ์์ ${NAME}๋ผ๋ ์๋ก์ด ๊ตฌ๋ฌธ์ ์ฌ์ฉํด์ ๊ฐ๋จํ ์ฒ๋ฆฌํ ์ ์๋ค.
// befor
var fourAgreements = 'You have the right to be you.\n\
You can only be you when you do your best.'
//after
var fourAgreements = `You have the right to be you.
You can only be you when you do your best.`
// ์ฌ๋ฌ์ค๋ "`" (back-ticked)์ ์ฌ์ฉํ์ฌ ์์ฑ ํ ์ ์๋ค.
// befor
var jsonMiddleware = require('body-parser').json
var body = req.body,
username = body.username,
password = body.password
//after
var {jsonMiddleware} = require('body-parser')
var {username, password} = req.body
// var๋ก ํ ๋นํ๋ ค๋ ๋ณ์๋ช
๊ณผ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ property๋ช
์ด ๊ฐ์์ผ ํ๋ค.
// ๋ํ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ ๋ฐฐ์ด์ ๊ฒฝ์ฐ {} ๋์ []๋ฅผ ์ฌ์ฉํด์ ์์ ์ ์ฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
// befor
var ids = ['5632953c4e345e145fdf2df8','563295464e345e145fdf2df9']
var messages = ids.map(function (value) {
return "ID is " + value // explicit return
});
//after
var ids = ['5632953c4e345e145fdf2df8','563295464e345e145fdf2df9']
var messages = ids.map(value => `ID is ${value}`) // implicit return
//ํ์ดํ ํจ์๊ฐ ํ ์ค์ ๋ช
๋ น๋ฌธ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉด ํํ์์ด ๋์ด ๋ช
๋ น๋ฌธ์ ๊ฒฐ๊ณผ๋ฅผ ์์์ ์ผ๋ก ๋ฐํํ๋ค.
// befor
var ids = ['5632953c4e345e145fdf2df8','563295464e345e145fdf2df9']
var messages = ids.map((value, index, list) => `ID of ${index} element is ${value} `)
// after
var ids = ['5632953c4e345e145fdf2df8','563295464e345e145fdf2df9']
var messages = ids.map((value, index, ...abc) => ({v:value, i:index, a:abc}))
// ๋ํ ๋ณธ๋ฌธ์ ๊ดํธ๋ก ๊ฐ์ธ ๊ฐ์ฒด ํํ์์ ๋ฐํํ ์ ์์ผ๋ฉฐ ... ์ ์ด์ฉํด ๊ฐ๋ณ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค.
// befor
setTimeout(function(){
console.log('Yay!')
setTimeout(function(){
console.log('Wheeyee!')
}, 1000)
}, 1000)
// after
var wait1000 = ()=> new Promise((resolve, reject)=> {setTimeout(resolve, 1000)})
wait1000()
.then(function() {
console.log('Yay!')
return wait1000()
})
.then(function() {
console.log('Wheeyee!')
});
//ES5 ๋ณด๋ค ES6์ Promise๋ฅผ ์ฌ์ฉํ ์์๊ฐ ๋ ๋ณต์กํด ๋ณด์ด์ง๋ง ์์ ๊ฐ์ด ์ค์ฒฉ๋ setTimeout ์์๋ฅผ ๋ณด๋ฉด Promise์ ์ด์ ์ ํ์ธํ ์ ์๋ค.
let, const ๋ ์ค์ ๋ก ํธ์ด์คํ
์ด ๋์ง๋ง, var์ ๋ค๋ฅด๊ฒ ํธ์ด์คํ
ํ ์ ์ธ, ์ด๊ธฐํ๊ฐ ๋์์ ์ด๋ฃจ์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ ReferenceError๊ฐ ๋ฐ์ํ๋ค.
ES6๋ถํฐ Javascript๋ class์ class ์์์ ์ง์ํ๋ค.(ES6 ์ด์ ์๋ class ๋์ ์์ฑ์๋ฅผ ์ฌ์ฉํ๋ค.)
// ES6 ์ด์
function Person(name, age) {
this.name = name;
this.age = age;
}
// ํ๋กํ ํ์
๋ฉ์๋
Person.prototype.introduce = function() {
return '์๋
ํ์ธ์. ์ ์ด๋ฆ์' + this.name + '์ด๊ณ , ๋์ด๋' + this.age + '์
๋๋ค.';
}
var person = new Person('ํ๊ธธ๋', 25);
console.log(person.introduce()); // ์๋
ํ์ธ์. ์ ์ด๋ฆ์ ํ๊ธธ๋ ์ด๊ณ , ๋์ด๋ 25 ์
๋๋ค.
// ES6
class Person {
constructor({name, age}) { // Destructing Assignment(๊ตฌ์กฐ๋ถํดํ ๋น)
this.name = name;
this.age = age;
}
// ๋ฉ์๋
introduce() {
return `์๋
ํ์ธ์. ์ ์ด๋ฆ์ ${this.name} ์ด๊ณ , ๋์ด๋ ${this.age} ์
๋๋ค.`;
}
}
const person = new Person({ name: 'ํ๊ธธ๋', age: 25 });
console.log(person.introduce()) // ์๋
ํ์ธ์. ์ ์ด๋ฆ์ ํ๊ธธ๋ ์ด๊ณ , ๋์ด๋ 25 ์
๋๋ค.
Javascript์ ์ค์ํ ์ ๊ธฐ๋ฅ, ๋๋ ์ ๊ธฐ๋ฅ๋ค์ ํต์นญ
import, export๋ฅผ ์ด์ฉํด ๋ด๋ณด๋ด๊ฑฐ๋ ๋ถ๋ฌ์ฌ ์ ์๋ค.
// my-module
// export๋ import ํ ๋ {} ๋ก ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
export const member = () => { // export๋ ํด๋น ๋ชจ๋์์ ์ฌ๋ฌ๊ฐ ์กด์ฌ ๊ฐ๋ฅ
return 'use Module';
}
// export default๋ import ํ ๋ {} ๋ก ๊ฐ์ธ์ฃผ์ง ์์๋ ๋๋ค.
const name = (name) => `My name is ${name}.`;
export default name; // export default๋ ํด๋น ๋ชจ๋์์ ํ๋๋ง ์กด์ฌ
import name from "my-module";
import * as name from "my-module"; // my-module์ ๋ชจ๋ ๊ธฐ๋ฅ์ name์ผ๋ก alias
import { member } from "my-module"; // my-module์ member ๋ผ๋ ๊ธฐ๋ฅ๋ง ์ฌ์ฉ
import { member as myMember } from "my-module" // my-module์ member ๊ธฐ๋ฅ์ myMember ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ
์ถ์ฒ : ์ฝ๋ฉ์๋๋ด์ค(https://www.codingworldnews.com)
์ถ์ฒ : https://blog.asamaru.net/2017/08/14/top-10-es6-features/