# ES6, ES7, ES8 변경점과 node.js의 버전별 구현 현황
아무 생각없이 js의 신규 기능들을 사용하고는 있는데... node.js 버전과 es 버전별 정리를 해놓아야 나중에 호환성 문제에서 해메지 않을듯 하다. 자세한 스펙은 관련 키워드를 검색해서 알아보면 될것.
ECMAScript 6 Features | Seokjun Kim (opens new window)
아래 각 항목의 괄호 안의 v4 등은 node.js 버젼이다.
# ES2015 (ES6)
- Promise(v4): 정식 지원.
- Array helpers(v4): forEach, map, filter, reduce, ...
- const, let(v4): var는 deprecated. let은 var와 다르게 scoping 문제가 없다.
- Template strings(v4): 백틱으로 처리된 문자열,
hello, ${w}
- Fat arrow function(v4):
() => {}
형태의 함수 정의. this, arguments등 사용시에 주의 - Enhanced object literals(v4): 객체 멤버의 key/value가 동일하면 축약 가능.
{ k: k, fn: func(){} }
대신{ k, fn(){} }
- Default function arguments(v6): 함수 인자 기본값
- Rest, spread(v5, v6): 인자 전달이나 받을때 ...으로 배열 바인딩 (go언어처럼)
- Destructuring(v6): 변수나 함수인자 대입을 멀티로.
let { a, b } = { ... }
또는let [ a, b ] = [ ... ]
- Class(v4): 기본적으로 function 키워드와 동일하나 명시적으로 객체를 나타낼 수 있게. extends가 존재한다. getter, setter.
- ES Modules(Import, export): require대신 import, module.exports. 여러 복잡한 이슈로 node에선 현재까지 미지원.
- Generator(v4, v6):
function* ()
인데 ES8의 await/async로 인해 뭍혀버린듯 하다. 참고로 babel 트랜스파일러로 변환해보면 await/async 키워드는 generator로 바뀐다. 그렇단 얘기는 v4 에서도 babel을 통해 await/async가 가능할수도? - 기타...
# ES2016 (ES7)
- Exponentiation operator(v7): 거듭제곱이 가능하다! 3**3
- Array.prototype.includes(v6)
- 딱 2개뿐
# ES2017(ES8)
- Await, async(v7): js도 동기화 코드 형태 유사하게 코딩이 가능
- Shared memory and atomics(v9): 워커간 통신... js의 멀티 프로세스화... 스레드는 아니니 그나마.
- Object.values, Object.entries(v7)
- Trailing commas in function parameter lists and calls(v8): 파라미터 끝 컴마 문법 오류 아님!
- 기타...
그리고 node.js의 기능별/버젼별 표가 있어서 유용하게 참고 가능하다. ES 버전과 딱 떨어지진 않는다. promise는 이미 4버전부터 거의 돌아가는구나.