ES(ECMAScript)
이해하기
ES(ECMAScript, 에크마스크립트)는 2009년 표준화 된 ES5 이후로 2015년 ES6로 업데이트 되어 현재 JavaScript에서 ES6를 많이 사용 중에 있습니다.
ES5는 jquery와 함께 사용되었던 var, function등을 사용한 javascript 버전이라고 할 수 있고,
ES6는 현재 많이 사용되는 Node, React 등에 사용되는 버전이라고 할 수 있습니다.
https://es6console.com/ ES6를 ES5로 변환시켜주는 사이트
문법
const, let
ES5까지 변수는 var를 사용했었습니다. var는 편리했지만 단점들이 크게 존재합니다.
var의 단점으로는
함수 레벨 스코프(Function-level scope)로 함수의 코드 블록만 스코프로 인정합니다.
전역 함수 외에 생성한 모든 변수는 전역으로 선언됩니다.
이 문제는 전역 변수를 남발할 가능성이 높습니다. 그리고 전역변수가 많이 생기는 만큼 변수 중복 선언이 될 가능성이 높아집니다.
for 문의 변수 선언문에서 선언한 변수를 for 문의 코드 블록 외부에서 참조할 수 있습니다.
블록 단위로 스코프가 인정되지 않아 발생하는 케이스입니다.
변수 호이스팅 문제가 있습니다.
호이스팅이란 var 로 선언한 표현식나 함수 등을 실행 단계에서 해당 스코프의 맨 위로 옮기는 것을 말합니다.
ES6에서는 var의 이런 단점들을 보안한 let과 const가 존재합니다.
- -const : 변경이 불가능한 변수로 상수로 사용됩니다.
-let : 새로운 값도 선언될 수 있고, 재할당도 가능합니다.(var의 hoisting현상을 피하기 위함)
// es6 let test = 'test'; const test2 = 'test2';
// es5 var test = 'test'; var test2 = 'test2';
Arrow functions(화살표 함수)
// es6
const test = () => {
return 'test'
}
console.log(test());
// test
// es5
var test = function test() {
return 'test';
};
console.log(test());
// test
Template Literals(템플릿 리터럴)
// es6
let test = 'test';
console.log(`테스트 입니다. ${first}`);
// 테스트 입니다. test
// es6
let test = 'test';
console.log('테스트 입니다. ' + test);
// 테스트 입니다. test
Default parameters(기본 매개 변수)
함수에 전달된 파라미터의 값이 undefined일 때, 초기화 설정된 값을 말합니다.
function test(test='테스트') {
return test;
}
console.log(test('테스트 입니다.'))
// 테스트 입니다.
console.log(test())
// 테스트
Destructuring Assignment(비구조화 할당)
배열이나 객체의 속성을 해체하여 그 값을 각 변수에 선언할 수 있게 하는 표현식(expression)입니다.
// es6
let array = ['test1', 'test2'];
let [test1, test2, test3='test3] = array;
console.log(test1) // test1
console.log(test2) // test2
console.log(test3) // test3
Import and export(가져오기 및 내보내기)
// 배열
export let array = ['test1', 'test2', 'test3'];
// 상수
export const TEST = 'test';
// 함수
export function functionTest(test) {
console.log(test);
}
// 클래스
export class classTest {
constructor(test) {
this.test = test;
}
}
import {functionTest} from './functionTest.js';
functionTest('test'); // test
Promises(프로미스)
// Promise 객체의 생성
const promise = new Promise((resolve, reject) => {
// 비동기 작업을 수행한다.
if (/* 비동기 작업 수행 성공 */) {
resolve('result');
}
else { /* 비동기 작업 수행 실패 */
reject('failure reason');
}
});
Spread Operator(확산 연산자)
var arr1 = [1, 2, 3];
var arr2 = [...arr1, 4, 5, 6];
console.log(arr2); // [ 1, 2, 3, 4, 5, 6 ]
var str1 = 'test test';
var str2 = [...str1];
console.log(str2); // [ "t", "e", "s", "t", " ", "t", "e", "s", "t" ]
Rest parameter(나머지 매개 변수)
function test(test1, test2, ...testArray) {
console.log(testArray)
}
test(1,2,3,4,5) // [3, 4, 5]
Classes(클래스)
class classTest {
constructor(test) {
this.test = test;
}
}