Javascript를 배운지 이제 약 7개월 가량이 지났다.
프로젝트에서 내가 그냥 사용하는 자바스크립트의 문법이 ES6의 문법이란 것을 알게되었다.
ES6? 문득 궁금하여 ES6 문법들에 대해 알아보고 혹시 또 다른 유용한 문법이 있는지, ES5와 다른점이 있는지 확인해보기로 한다.
ECMA란, 자바스크립트를 표준화하기 위해 만들어진 스크립트 프로그래밍 언어를 말한다. 여러 기술을 기반으로 만들어졌으며 대표적으로 Netscape의 Javascript, Microsoft의 Jscript가 있다.
보다시피 서로 다른 언어로 개발 된 웹 페이지에서 크로스 브라우징 이슈가 있어 이를 해결하기 위해 Javascript를 표준화 한 것이 ECMAScript 이다.
- 2009년에 표준화 된 ES5 이후 언어에 대한 주요 업데이트
- ES2015 또는 ES6로 불림.
- 최신버전은 아니며 매년 6월에 규칙적으로 개정되고 있음. (현재 최신버전 : ECMARScript 2022)
- ES5에서 문제가 되었던 부분이 ES6에서 해결되었고, 많은 기능이 추가되어 유명 라이브러리들도 이에 맞춰 개발 환경을 ES6로 변경하게 됨.
- 최신 버전이 다양한 브라우저에 적용되기에는 오랜 시간이 걸리기 때문에 아직 대부분 ES6 사용
let
, const
의 등장var
를 사용하여 변수를 저장하였지만, ES6 부터는 let
과 const
를 사용하여 변수를 저장할 수 있다.변수 var
- 변수의 선언은 전역 범위 혹은 함수 범위로 지정된다.
- 함수 외부에서 선언 시 전역 변수로 설정 된다.
- 함수 내부에서 선언 시 함수 내에서만 사용과 접근이 허용된다.
var
처럼 값을 변경해줄 순 있지만 변수의 선언 범위는 블록("{}")내에서만 유효하다. < app.js >
var global = "globalValue";
let local = "localValue";
console.log(window.global); // "globalValue"
console.log(window.loca); // undefined
// 전역 변수는 window 객체의 프로퍼티이다.
var global;
let local; // error!
console.log(global) // "globalValue"
< component.js >
console.log(global); // "globalValue"
console.log(local); // error! (undefined)
--------------------------------------------
var
, let
차이점// var
for (var i = 0; i < 5; i++) {
console.log(i); // 1, 2, 3, 4
}
console.log(i); // 5
--------------------------------------------
// let
for (let i = 0; i < 5; i++) {
console.log(i); // 1, 2, 3, 4
}
console.log(i); // Uncaught ReferenceError: i is not defined
let
과 마찬가지로 블록 {} 범위 내에서 접근이 가능하다const
변수가 참조하는 객체, 배열의 내부 값이 불변이라는 의미는 아니다.const TEMP; // !! SyntaxError
const NAME = "goodjam"; // common usage
NAME = "nojam"; // !! TypeError
--------------------------------------------
// const Object
const 객체 = {}; // OK
객체.any = "anything";
console.log(객체.any); // anything
const 우리집 = { 티비: "삼성", 냉장고: "엘지" };
우리집.티비 = "엘지"
console.log(우리집.티비) // 엘지
우리집 = { 티비: "엘지", 냉장고: "딤채" }; // !! TypeError
--------------------------------------------
// const Array
const 음식 = []; // OK
음식.push("pizza");
음식.push("coke");
console.log(음식[0]); // pizza
음식 = []; // !! TypeError
// 매개변수에 기본 값이 없는 경우
function 더하기 (x, y) {
return x + y;
}
const sum = 더하기();
console.log(sum); // undefined;
--------------------------------------------
// 매개변수에 "=" 등호를 사용하여 기본 값을 정의
function 방문인사es6(message="Hello World!") {
console.log(message);
}
방문인사es6(); // Hello World!
방문인사es6(undefined); // Hello World!
방문인사es6("Hi! bro"); // Hi! bro
// ES5 기본 값 할당 방법
function 방문인사es5(message) {
message = typeof message !== "undefined" ? message: "Hello World!";
console.log(message);
}
방문인사es5();
--------------------------------------------
// 매개변수의 기본 값을 다른 함수의 결과 값으로 사용
function 인사하기(message=방문인사es6()) {
console.log(message);
}
인사하기(); // Hello World!
--------------------------------------------
// 파라미터에 계산식을 사용할 수도 있다.
const 부가세 = () => 0.1;
const 물품가격 = (가격, 부가세금액 = 가격 * 부가세()) {
return 가격 + 부가세금액;
}
const 맥북가격 = 물품가격(1500);
console.log(맥북); // 1650;
--------------------------------------------
function 피타고라스 (a=1, b=1) {
retrun (a** + b**);
}
...
Spread Oprator )// 기본적인 사용 방법
const 장바구니 = ["콜라", "맥주"];
const 삼성냉장고 = ["물", "식빵", ...장바구니]; // ["물", "식빵", "콜라", "맥주"]
const 엘지냉장고 = [...장바구니, "물", "식빵"]; // ["콜라", "맥주", "물", "식빵"]
--------------------------------------------
// Array push() 에서의 스프레드 연산자 사용법
// 두 숫자의 배열을 함수에 전달하기 위한 방법 (ES5 vs ES6)
function 합치기(a, b) {
return a+b;
}
const result_ES5 = 합치기.apply(null, [1, 2]); // 3 (ES5)
const result_ES6 = 합치기(...[1,2]); // 3 (ES6)
// 배열에 배열의 요소 추가하기 (ES5 vs ES6)
const 해야할일 = ["방청소", "ES6공부"];
const 끝마친일 = ["장보기", "빨래하기"];
// ES5 문법사용 시
[].push.apply(끝마친일, 해야할일];
// ES6 문법 사용 시
끝마친일.push(...해야할일);
// 끝마친일 = ["장보기", "빨래하기","방청소", "ES6공부"];
--------------------------------------------
// 배열의 문자열을 분해하기도 한다.
const 문자 = ["A", ..."BC", "D"];
console.log(문자); // ["A", "B", "C", "D"]
--------------------------------------------
// Rest Parameters (함수의 매개변수에서 ... 사용)
// 매개변수의 스프레드 연산자는 순서가 항상 마지막이어야 함.
function sum(a, ...agr) {
let result = 0;
for (const num of agr) {
result += num;
}
return result - a;
}
sum(5, 3, 4, 5, 6, 1); // 14
const computer = "MacBook "
// ES5 사용 시
function createUserES5 (name, id) {
return {
name : name,
id : id,
loading : function () {
console.log(this.name + " 님의 정보를 로딩중입니다..");
}
};
};
// ES6 사용 시
function createUserES6 (name, id) {
return {
name,
id,
loading() {
console.log(this.name + " 님의 정보를 로딩중입니다..");
},
"log out"() {
console.log(this.name + "님의 계정을 로그아웃 합니다."
}
};
};
const user = createUserES6 ("아무개", 11234);
user.loading(); // 아무개 님의 정보를 로딩중입니다..
user["log out"](); // 아무개 님의 계정을 로그아웃 합니다.
''
, ""
사용하여 문자열 리터럴을 감싸주었지만 기능이 제한적이었다.``
백틱을 사용하여 보다 복잡한 문자열을 안전하고 깔끔하게 작업할 수 있다.``
백틱의 기능// 기본 사용법
const 자기소개 = `안녕하세요.
저는 프론트엔드 개발자 김땡땡입니다.
저는 자바스크립트를 사용하는 프로젝트를 참여한 경험이있습니다.`;
// 백틱은 따로 \n 이스케이프를 활용하지 않고, 사용자의 입력에 따른 줄바꿈, 띄어쓰기가 적용된다.
// 변수 및 표현식을 대체
const 성 = "김";
const 이름 = "아무개";
const 나이 = "30";
console.log(`안녕! 나는 ${성}${이름}라고 해 나이는 ${나이-10}이야 반가워!`);
// 안녕! 나는 김아무개라고 해 나이는 20살이야 반가워!
여러 예시를 같이 작성하다 보니 꽤 길어서.. 글을 2개로 쪼개야겠다..
다음 글에서..