
![]() |
|---|
: 비동기 코드 중 하나, 시간 지연 기능
콘솔에 출력되는 순서 : '시작' -> '끝' -> '3초 후 실행'
이는 호출 스택만으로 설명할 수 없음
=> 이벤트 루프 사용
자바스크립트 브라우저의 내부 요소
: 호출 스택, 백그라운드, 태스크 큐, 콘솔창, 메모리
이벤트 루프의 역할
: 호출 스택이 비어 있을때 태스크 큐에서 함수들 하나하나를 호출 스택에 끌어와서 실행한다.
예제1 코드의 실행 과정
예제2 코드의 실행 과정
if(--) {
var x = 3;
}
console.log(x); //3
if(--) {
const x = 3;
}
console.log(x); // 호출안됨
const a = 3;
a = 5; //에러
const c; //에러
const b = {name: 'zero'}
b.name = 'nero' // 가능
let a = 3;
a = 5; //가능
: 변수를 $와 {}로 호출하는 것
var won = 1000;
const ex = won + 원
const result = ${won}원
ex와 result는 똑같이 출력됨
//이전
name: name
//이후
name
// 속성명 : ES6
// 선언
[es + 6]
function add1(x, y) {
return x + y;
}
const add2 = (x, y) => {
return x + y;
}
const add3 = (x, y) => x + y;
const add4 = (x, y) => (x + y);
add 1, 2, 3, 4 모두 같은 함수이다.
function not1(x) {
return !x;
}
const not2 = x => !x;
not 1, 2는 같은 함수이다.
기존 function과 다른 점은 this 방식이다.

const example = {a: 123, b: {c: 135, d: 146} }
// 기존
const a = example.a;
const d = example.b.d;
// new
const { a, b: { d } } = example;
이런 식으로 코드를 작성하면 a = 123, d = 146 이런 식으로 선언이 된다.
arr = [1, 2, 3, 4, 5]
// 기존
const x = arr[0]
const y = arr[1]
// new
const [x, y, , , z] = arr;
이 역시도 x, y를 각각 선언하지 않고 arr의 값을 꺼내와서 x, y, z를 선언할 수 있다.
this는 함수를 호출할 때 어떻게 호출되었냐에 따라 결정되기 때문에 this를 사용한 경우에는 구조분해 할당이 문제가 될 수 있다.
기존에는 생성자 따로, static 메서드 따로, instance 메서드 따로 선언해야 했음
기존 코드
이후에는 클래스 안에 전부 함께 선언할 수 있음
클래스 코드
: 내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체

Promise.all(배열) : 여러 개의 프로미스를 동시에 실행
이 코드에서
then((user) => {
가 반복되는 것을 변수로 저장한다. 실행 순서는 await이 먼저이다.
let user = await Users.findOne({});
이전에는 await을 위해서는 async function안에 작성해야 했다.
이후에는 async 없이도 await을 사용할 수 있다.
(async () => {
for await(promise of [promise1, promise2]) {
console.log(promise);
}
})();
for await : promise를 반복할 때 사용
const m = new Map();
m.set('a', 'b');
m.set(c, 'd'); // 키 값은 객체도 가능
m.set({a : 'b'}, {c: 'd'});
m.get({a : 'b'}) // undefined
// m에 set되어 있는 {a : 'b'}와 새로 입력한 {a : 'b'}는 참조값이 다름
const obj = {key, 'key'}
m.set(obj, 123)
m.get(obj) // 이 경우에는 값이 나옴
for (const [k, v] of m) {
console.log(k, v);
}
m.forEach(v, k) => {
console.log(k, v);
});
m.has(obj)
m.delete(obj)
m.clear
중복을 허용하지 않는 배열
(다만 자료형이 다르면 가능하다)
set은 Map과 다르게 add를 사용(map은 set사용)
const s = new Set();
s.add(1);
for (const a of s) {
console.log(a);
{
const wm = new Map();
let obj4 = {};
wm.set(obj4, '123')
obj4 = null; // 안사라짐
이 경우에는 garbage collecting이 자동으로 되지 않는다.
Garbage Collection
쓸모 없어진 객체가 차지하는 메모리를 자동으로 해제하는 것
weakMap은 garbage collecting이 자동으로 된다.
const wm = new WeakMap();
let obj4 = {};
wm.set(obj4, '123')
obj4 = null; // 사라짐
: 왼쪽 값이 null과 undefined 일때만 오른쪽 값을 반환
const a = 0;
const b = a || 3; // ||는 모든 falsy 값일 때 오른쪽 값을 반환
const c = null;
const d = c ?? 3; //c가 null이기 때문에 d에는 3이 대입됨
console.log(d); // 3
: null과 undefined를 조회할 때 에러 발생하지 않도록 막음
const c = null;
c.d //에러
c?.d //문제없음
함수도 다음과 같이 호출할 수 있다.
c?.f()
const A = {'a', 'b', 'c'}
A?.[0]
: 서버로 요청을 보내는 코드
then과 catch 사용해서 전송 | await 사용해서 전송 |
|---|

: formData 객체를 만들어서 요청에 첨부

주소창에 한글 입력할 때 decodeURIComponent로 감싸서 입력
https://~~/${encodeURIComponent('노드')
