// 삼항 연산자
condition ? exprIfTrue : exprIfFalse
앞에서부터 조건문, 물음표(?), 조건문이 참(truthy)일 경우 실행할 표현식, 콜론(:), 조건문이 거짓(falsy)일 경우 실행할 표현식이 배치된다. 해당 연산자는 if...else문의 대체재로 빈번히 사용됩니다.

else if를 작성할 필요가 없다.return만 있기 때문에 과감하게 삼항 연산자를 활용할 수 있다. // 널 병합 연산자
leftExpr ?? rightExpr
널 병합 연산자 (??) 는 왼쪽 피연산자가 null 또는 undefined일 때 오른쪽 피연산자를 반환하고, 그렇지 않으면 왼쪽 피연산자를 반환하는 논리 연산자이다.

let이라는 변수를 선언한 것과 조금 지저분해보이는 if문을 사용한 것을 널 병합 연산자를 사용하여 아래와 같이 바꿀 수 있다. 

undefined인 경우에만 default 값이 자동으로 할당되고, null로 명확하게 지정하거나 값이 있는 경우에는 default parameter는 해당되지 않는다. undefined인 경우에만 반환되고, 널 병합 연산자는 null이거나 undefined인 경우 모두 오른쪽 연산자를 반환한다. ||) Operator와의 차이// 널 병합 연산자
leftExpr ?? rightExpr
// OR 연산자
expr1 || expr2
??)는 왼쪽 피연산자가 null이거나 undefined인 경우에만 오른쪽 피연산자가 반환된다.||)는 왼쪽 피연산자가 falsy인 경우, 오른쪽 연산자가 반환된다. falsynull;NaN;0, -0;"" or '' or ``);undefined
// 널 병합 연산자
leftExpr ?? rightExpr
// OR 연산자
expr1 || expr2


// 함수 호출:
myFunction(...iterableObj);
//배열 리터럴과 문자열:
[...iterableObj, '4', 'five', 6];
//객체 리터럴(ECMAScript 2018에서 추가):
let objClone = { ...obj };


// Optional chaining
obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)
?.) 는 체인의 각 참조가 유효한지 명시적으로 검증하지 않고, 연결된 객체 체인 내에 깊숙이 위치한 속성 값을 읽을 수 있다.?. 연산자는 . 체이닝 연산자와 유사하게 작동하지만, 만약 참조가 null 또는 undefined이라면, 에러가 발생하는 것 대신에 표현식의 리턴 값은 undefined로 단락된다. 함수 호출에서 사용될 때, 만약 주어진 함수가 존재하지 않는다면, undefined를 리턴한다.


위 코드를 filter(), map(), reduce() 메서드를 사용하여 가독성 좋게 쓸 수 있다.
filter(): 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환한다.map(): 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환한다.reduce(): 배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환한다.
굳이 함수로 따로 만들 필요 없이 배열 API를 사용하여 아래 코드와 같이 만들 수 있다. 
하지만 위 코드처럼 연속적인 일을 하는 경우엔 아래와 같이 chining하여 더욱 간단하게 작성할 수 있다.

async / await두 가지 이상의 프로미스를 연결해서 사용해야 할 때에는 async와 await을 이용하면 깔끔하고 순차적으로 확인할 수 있기 때문에 가독성을 높이고 이해력을 높일 수 있다.

(영상을 보면서 육성으로 와... 하면서 본 부분이다...)

중복된 부분을 제거하여 새로운 배열로 만들어야 하는 것이 퀴즈였다. 나는 일단 filter()를 사용하여 중복된 것을 찾고 새로운 배열로 반환하기 위해 map()을 사용할 생각이었다. 이것도 나름 잘 생각한 거라고 생각했는데 정답 코드는 더욱 더 간단했다.

위 코드를 하나씩 뜯어보자면,
new Set(array)Set이라는 자료 구조는 중복을 허용하지 않는다. array의 배열을 전달해서 새로운 Set이라는 자료를 만든다. 이때 중복된 것은 제거된다.[...new Set(array)]Set에 있는 것들을 각각 하나씩 나열하여 새로운 배열로 반환한다.