ES6+(ECMAScript2015+)
var
헷갈릴수 있는 녀석이다.
앞으론 어지간해선 쓰지말자.
let
Block( {} ) 단위 스코프 변수
const
Block( {} ) 단위 스코프 상수
단 값 재할당은 안되지만 Object내의 값은 바꿀수 있음.
class 와 getter setter
class Product {
constructor() {
this._id = null;
}
get id() {
return this._id
}
set id(id) {
if (!!id && !isNaN(id) && !Number.isInteger(id))
throw new Error('id must integer');
this._id = id;
}
}
class newProduct extends Product {
constructor() {
super();
}
getId() {
return `Id is ${this.id}`;
}
}
Default Parameter
function print(value = "hello world"){
console.log(value);
}
Spread operator(펼침연산자)
내용을 하나씩 풀어 대입해준다.
function f(x, y, z) {
return x + y + z;
}
const args = [1, 2, 3];
f.apply(this, args); // ES5
f(args); // ES6
const numList1 = [1,2,3];
const numList2 = [4,5,6];
const numList3 = [numList1, numList2]; //[1,2,3,4,5,6]
const user = { "name" : "gildong" };
const diffUser = { user, "age" : 40 }; //{ "name" : "gildong", "age" : 40 }
Destructuring assignment
Object
const user = { "name" : "gildong", "age" : 40, "path" : "pangyo" };
const { name, age, path : address, company = "무직" } = user;
//path를 address로 rename
//company에 default Value 추가.
// 때에 따라 이렇게 사용하기도 한다.
function sum({a, b}) {
return a + b;
}
const values = { a : 10, b : 20};
sum(values)
Array
const numList = [1, 2, 3, 4, 5, 6, 7, 8];
const [first, second, ,four, rest] = numList;
console.log(rest); //[5, 6, 7, 8]
// ...rest와 같이 사용하는 것을 rest operrator 라고 함.
Arrow function(화살표 함수)
lambda 표현식으로 함수를 정의할 수 있다. 아래 함수는 모두 동일한 일을 한다.
function sum(a, b) {
return a + b;
}
const sum = (a, b) => { return a + b };
const sum = (a, b) => a + b; // {}를 감싸기 않으면 자동으로 return 을 한다.
// 인수가 하나인 경우 아래와 같이 () 제외할 수 있다.
const double = d => d * 2;
Arrow function의 경우 함수가 정의된 시점이 this가 됨. 즉 화살표 함수를 감싸는 스코프를 this로 계승 받음.
var userName = "둘리";
let user = {
"userName" : "gildong",
func : function() {
setTimeout(function() {
console.log("func", this, this.userName); // func, window, 둘리
},1000);
},
arrowFunc() {
setTimeout(() => {
console.log("arrowFunc", this, this.userName); // arrowFunc, user, gildong
},1000);
}
}
user.func(); // function으로 정의된 callback의 경우 Window를 가리킴
user.arrowFunc(); // user가 정의된 이후 callback이 실행됨으로 this가 user object를 가리킴
let user2 = {
"userName" : "gildong",
func : function() {
console.log("func", this, this.userName); // func, user2, gildong
},
arrowFunc : () => {
console.log("arrowFunc", this, this.userName); // arrowFunc, window, 둘리
}
}
user2.func(); // object method인 경우 호출자로부터 this를 전달 받음.
user2.arrowFunc(); // 정의 시점에 user2는 정의 전이므로 this는 window 가 된다
Property value shorthand
const id = 10;
const obj = { id }; // { "id" : id } 과 같다.
String
템플릿 문자열(backtick), backtick을 통한 multiline 제공
const message = "world";
console.log(`hello ${message}
javascript`)
Map
key, value 구조로 데이타 저장. 잘 알고 계시는
const names = new Map();
names.set("철수", 1);
names.set(2, "영희");
names.keys(); // MapIterator {"철수", 2}
names.values(); // MapIterator {1, "영희"}
names.size; // 2
names.has("철수"); // true
names.delete("철수"); //true
WeakMap
Map은 원시 타입, 객체 참조값 모두 키로 사용할 수 있으나 WeakMap은 객체 참조값만 사용가능하다.
포인트는 내부에 저장된 객체를 참조하는 값이 없을 경우 가비지 콜렉션의 대상이 된다.
이터러블 규약을 따르지 않아 열거할 수 없고 크기를 알수 없다.
개인적으로 어디에 쓸지 잘 모르겠다.
let wm = new WeakMap();
function func(){
const someObj = {};
wm.set(someObj, 1);
wm.has(someObj);
console.log(wm);
}
func();
console.log(wm);
Set
유일한 데이타를 저장하기 위해서 사용한다.
특이한 점은 Object의 경우 참조값이 들어가게 된다.
따라서 아래 예제와 같이 {}을 넣으면 동일한 값이지만 참조값이 다르므로 추가된다.
const keySet = new Set();
keySet.add("10");
keySet.add("20");
keySet.add(20);
keySet.add({});
keySet.add({});
// "10", "20", 20, Object, Object
keySet.has(20); // true
keySet.delete(20); // true
keySet.size; // 4
keySet.clear();
WeakSet
Set은 원시타입과 객체참조값 모두 담을수 있지만 WeakSet은 객체 참조값만 담을 수 있다.
WeakMap처럼 이터러블 규약을 따르지 않는다.
내부에 저장된 값을 참조하는 값이 없을 때는 가비지 콜렉션 대상이 된다.
Generator
절차적 처리를 위해서 사용하며 제너레이터 함수의 yield 의 수만큼 순차적으로 값을 반환한다.
function* action(url){
}
function* generator_function() {
let a = yield 12
let b = yield a + 1
let c = yield b + 2
yield c + 3
}
let generator = generator_function()
console.log(generator.next().value) // 12
console.log(generator.next(5).value) // 6
console.log(generator.next(11).value) // 13
console.log(generator.next(78).value) // 81
console.log(generator.next().done) // true
Promies
콜백헬 방지
작성중.....
Async await(es7)
비동기를 동기처럼 작동시킴
작성중....
'Javascript/node.js Coding' 카테고리의 다른 글
GraphQL Overview (graphql.js server code) (0) | 2018.01.05 |
---|---|
Mobx with angular 정리. (0) | 2017.12.05 |
Netflix Falcor Overview (0) | 2017.12.03 |