1. var, const, let

    var, const 의 가장 큰 차이점:

    const : ({} = 블록 스코프) 블록 스코프 존중

    var: 함수 스코프(function() {}) 블록 스코프 밖에서도 호출, 가능 함수 스코프 존중

    const, let 의 차이:

    const 는 선언시 한번만 값을 넣을 수 있지만 객체를 넣었을때 객체 안에있는 값을 바꾸는건 가능

    let 은 값을 변경 가능

  2. 프로미스

    1. 내용이 실행은 되었지만 결과를 아직 반환하지 않은 객체
    2. then 을 붙이면 결과를 반환
      1. Resonle(성공 리턴 값) → then 으로 연결
      2. Reject(실패 리턴 값) → catch 로 연결
    3. 실행이 완료되지 않았으면 완료된 후에 then 내부함수가 실행
    4. Promise.all([])여러개의 프로미스를 동시실행
    5. .allSettled 로 실패한것만 추려낼수 있음
  3. Async/await

    async function findAndSaveUser(Users) {
    	try {
    		let user = await Users.findOne([]);
    		user.name = 'zero';
    		user = await User.save();
    		user = await User.findOne([ gender: 'm']);
    	} catch (e) {
    		console.log(e);
    	} 
    }
    

    async 에서 return 을 하면 then 을 사용

  4. for await (배열)

    const promise1 = Promise.resolve('성공1');
    const promise2 = Promise.resolve('성공2');
    (async () => {
    	for await (promise of [promise1, promise2]) {
    		console.log(promise);
    	}
    })();
    
  5. Map

    // 생성
    const map = new Map();
    // 추가
    map.set('a', 'b');
    map.set('c', 'd');
    map.get('a');
    
    // key를 객체로
    const obj = { key: 'key'};
    map.set(obj, {c: 'd'});
    map.get(obj);
    
    // loof
    for (const [k, v] of map) {}
    
    map.forEach((v, k) => {});
    
    map.has();
    
    map.delete();
    
    map.clear();
    
    map.size
    

    WeakMap

  6. Set

    Set은 중복을 허용하지 않는다. 배열을 사용하고싶고 중복을 허용하지않을때 사용

    const arr = [1, 3, 1, 7, 2, 6, 3, 5];
    
    const set = new Set(arr);
    // 1, 3, 2, 7, 6, 5
    const result = Arrey.from(set);
    
    

    WeakSet

  7. 널병합/ 옵셔널 체이닝

    1. 널 병합

      falsy 값(0, ‘’, false, NaN, null, undefind) 일때 뒤에 값으로 넘어감

      주로 || 연산자 대용을로 사용

      const value = 0;
      const real = value ?? 3;
      console.log(real); // 3
      
    2. 옵셔널 체이닝

      null 이나 undefind 속성을 조회하는 경우 에러가 발생하는 것을 방지

      const c = null;
      try {
      	c.d;
      } catch (e) {} // error
      
      c?.d; // 문제 없음