현재 재직 중인 회사에서는 nest.js
를 사용하는데, 아무래도 전에는 계속 JAVA
를 주로 해왔다보니 처음 봤을 때 이게 뭐지? 싶은 것들을 정리해보려 한다.
-
plus sign +
const result = db.select;
const response = {
name: result.name,
age: +result.age
}
위와 같이 연산을 하는게 아닌 곳에 갑자기 특수문자 + 가 와 있는 경우가 있는데, 이는 아래와 같다.
const result = db.select;
const response = {
name: result.name,
age: Number.parseInt(result.age)
}
-
double question mark ??
javascript는 아니고 typescript이다. env설정값을 갖고 오기 위해서는 더 간결하게 작성할 수 있다.
const env = (process.env.NODE_ENV) ? process.env.NODE_ENV : 'dev'
const env = process.env.NODE_ENV ?? 'dev'
// 위 두개의 코드는 같다
정확한 명칭은 Nullish Coalescing이라고 하여 typescript 3.7소개 되었다.
-
underscore _
여러가지로 쓰인다.
그러나 #
처럼 특정 문법에 속하는것이 아니다
대부분 convention이다.
#
이 정식적으로 private을 나타내게 되기까지는 꼼수로 private을 나타내기 위하여 쓰였다.
const _name; // private으로 봐주겠니?
예약어때문에 문제가 되는경우에도 쓰인다.
const dbResult = [
{break: 10, id: 1},
{break: 20, id: 2},
{break: 30, id: 3}
];
dbResult.map(({break}) => break);
// VM310:1 Uncaught SyntaxError: Unexpected token 'break'
const breaktimes = dbResult.map(({break: break_}) => break_)
.reduce((sum, curr) => sum + curr);
예를 들면, 종업원들마다 휴식시간에 차이가 있고, 총 휴식시간이 얼마인지 구하고 싶을 때,
위처럼 break
는 javascript의 예약어이기 때문에 문제가 된다. 따라서 이를 다른 변수명으로 바꿔주는데, 의미는 그대로 갖고 가고 싶을때 기존 변수명_
로 나타내줄 수 있다.
-
curying
커링
. 인터넷에 다른 글들을 보면, 대부분의 볼 수 있는 곱셈예제
function multiply(a, b, c) {
return a * b * c;
}
function multipliyCurying(a) {
return function (b) {
return function (c) {
return a * b * c;
}
}
}
console.log(multipliyCurying(1)(2)(3)); // 6
위에까지만 보면 이해가 잘 된다.
그러나 arrow
를 넣고, return
이 한줄이라서 return
을 생략하는 경우 이해를 못하는 경우가 있을 수 있는데...
const multipliyCurying = (a) => (b) => (c) => a * b * c;
console.log(multipliyCurying(1)(2)(3)); // 6
위의 코드와 첫 예시의 코드는 같다.
기존의 첫 예시에 arrow를 적용하면,
const multipliyCurying = (a) => (b) => (c) => {
return a * b * c;
};
위에서 return
이 한줄이니 {
, return
을 지워주면 같은 코드이다.
-
asterisk *
function* fibonacci() {
let [a, b] = [0, 1]
while (true) {
yield a;
[a, b] = [b, a + b]
}
}
const fib = fibonacci();
[...Array(10).keys()].forEach(value => console.log(fib.next().value));
역시 특수문자가 오는데, *는 제네레이터를 의미한다. 그런데 이게
function* fibonacci() {
function *fibonacci() {
위처럼 마음데로 function뒤에 오거나 function의 이름 앞에 오거나 한다.
둘 중 하나는 문제가 있길 바라지만, 둘 다 가능하다.
모던 JavaScript 튜토리얼에서는 아래와 같이 가이드하고 있다.
둘 다 맞습니다.
그런데 *는 제너레이터 함수를 나타내므로 대개는 첫 번째 문법이 선호됩니다. *는 종류를 나타내는 것이지 이름을 나타내는 것이 아니기 때문입니다. 그러므로 *는 function에 붙이도록 합시다.
-
double asterisk **
Math.pow와 같다. 아래의 코드는 모두 8의 값을 갖는다.
const powed = Math.pow(2, 3);
const doubleAsterisk = 2 ** 3;
-
hashtag #