— javascript, es2015, es6 — 1 min read
ECMAScript의 표준 ECMA-262의 6번째 에디션을 의미 출처 : 웹Frameworks
ES2015
ES6
라고도 함.let
var
를 대신하는 let
키워드는 Block Scope.
예제 - 출처 MDN
1function varTest() {2 var x = 31;3 if (true) {4 var x = 71; // same variable!5 console.log(x); // 716 }7 console.log(x); // 718}910function letTest() {11 let x = 31;12 if (true) {13 let x = 71; // different variable14 console.log(x); // 7115 }16 console.log(x); // 3117}
const
const
는 다른 언어의 constant(상수)
와 같음. => 수정 불가.
Example
1const MY_NUMBER = 1;2MY_NUMBER = 2; // Assignment Error3const MY_NUMBER = 2; // Declare Error
Class
class
가 도입되었습니다.class
는 함수
입니다.Class는 사실 함수입니다. 함수를 함수 표현식과 함수 선언으로 정의할 수 있듯이 class 문법도 class 표현식과 class 선언 두 가지 방법을 제공합니다.
1class MyClass {} // Class 선언2let MyClass = class {}; // Class 표현식
1var p = new Polygon(); // ReferenceError23class Polygon {}
Template String
1console.log('string text line 12string text line 2'); // Error3console.log(`string text line 14string text line 2`); // OK
이 블로그 테마에서 Template String 문법이 적용이 안돼서 Syntax Highlighting이 정상적으로 적용되지 않는 것입니다.(JSX도 지원되지 않습니다.) 실제 코드에서 문제 없습니다.
`에 주의하세요 '이 아닙니다.
1let name = "Taesu Hyeon";2console.log("My name is " + name); // My name is Taesu Hyeon
1let name = "Taesu Hyeon";2console.log(`My name is ${name}`); // My name is Taesu Hyeon
Arrow Function
this
this
에 관한 엄격 모드 규칙 무시.arguments
arguments
객체가 없어서 나머지 매개변수로 대체.()로 묶어줘야함.
1let callback;2callback = callback || function() {}; // ok3callback = callback || () => {}; // SyntaxError: invalid arrow-function arguments4callback = callback || (() => {}); // ok
출처 : MDN
1(param1, param2, …, paramN) => { statements }2(param1, param2, …, paramN) => expression3 // 다음과 동일함: => { return expression; }45// 매개변수가 하나뿐인 경우 괄호는 선택사항:6(singleParam) => { statements }7singleParam => { statements }89// 매개변수가 없는 함수는 괄호가 필요:10() => { statements }
1// 객체 리터럴 식을 반환하는 본문(body)을 괄호 속에 넣음:2params => ({foo: bar})34// 나머지 매개변수 및 기본 매개변수가 지원됨5(param1, param2, ...rest) => { statements }6(param1 = defaultValue1, param2, …, paramN = defaultValueN) => { statements }78// 매개변수 목록 내 비구조화도 지원됨9var f = ([a, b] = [1, 2], {x: c} = {x: a + b}) => a + b + c;10f(); // 6
Example
1// ES52var myFunction = {3 funcLog: function (msg) {4 return msg;5 },6};7// ES68let myFunction = {9 funcLog: (msg) => msg,10};1112myFunction.funcLog("hi"); // hi
Import
1import name from "module-name"; // export default로 export한 멤버를 name에 받음.2import * as name from "module-name"; // export되는 모든 멤버를 name에 받음.3import { member } from "module-name"; // export된 멤버 member를 member로 받음.4import { member as alias } from "module-name"; // export된 멤버 member를 alias로 받음.5import { member1 , member2 } from "module-name";6import { member1 , member2 as alias2 , [...] } from "module-name";7import defaultMember, { member [ , [...] ] } from "module-name";8import defaultMember, * as alias from "module-name";9import defaultMember from "module-name";10import "module-name"; // import만 하면 되는 경우 ex) import "main.css";
Export
1export { name1, name2, …, nameN };2export { variable1 as name1, variable2 as name2, …, nameN };3export let name1, name2, …, nameN; // 또는 var4export let name1 = …, name2 = …, …, nameN; // 또는 var, const56export default expression;7export default function (…) { … } // 또는 class, function*8export default function name1(…) { … } // 또는 class, function*9export { name1 as default, … };1011export * from …;12export { name1, name2, …, nameN } from …;13export { import1 as name1, import2 as name2, …, nameN } from …;
Default export
는 스크립트 당 단 하나만 존재 가능.export default
는 ver, let, const
사용 불가.default export의 경우, 모듈 당 딱 하나의 default export가 있습니다. default export는 함수 또는 클래스, 오브젝트, 혹은 다른 것들이 될 수 있습니다. 이값은 가장 간단하게 import 할 수 있도록 하기 때문에 내보낼 값 중 "메인"에 해당하는 값으로 고려해야합니다. 출처 : MDN - export
Spread Operator
Example
1var arrayOne = [2];2var arrayTwo = [1].concat(arrayOne, [3]); // ES53var arrayTwo = [1, ...arrayOne, 3]; // ES64console.log(arrayTwo); // [1, 2, 3]
1let objOne = { one: 1 };2let objTwo = Object.assign({}, objOne); // ES53let objTwo = { ...objOne, two: 2 }; // ES64console.log(objTwo); // Object {one: 1, two: 2}
Promises
Async Await