1. Bigint
    1. 숫자 데이터 타입으로 표현할 수 있는 범위를 넘어선 숫자를 표현할 때 사용하는 데이터 타입
    2. 길이에 상관없이 정수를 나타낼 수 있음
    3. 마지막으로 n을 붙여 Bigint임을 나타냄
  2. Symbol
    1. 객체의 교유한 식별자를 만들기 위해 사용함
    2. 심벌을 Symbol()로 생성할 수 있고 Symbol(’id’)처럼 인자로 이름을 지정할 수 있다.
    3. 객체에서 유일한 식별자를 만들고 싶을 때 사용함, 설명이 동일한 심볼을 여러개 만들어도 각 심볼값은 다름
  3. Set
    1. 데이터 집합으로 중복에 대한 제한이 없는 배열과는 달리 중복을 허용하지 않는다.
    2. 정렬은 무작위 방식으로 정렬
  4. Map
    1. 객체와 같이 키와 값으로 연결하는 데이터 집합으로 객체와 동일한 컨셉으로 만들어졌지만 차이점을 가짐
    2. 객체
      1. 키값으로 문자, 심벌 타입만 허용
      2. 정렬에 관여하지 않음
      3. 순회를 위해서 키값을 통해 배열을 얻어 배열 순회
      4. 크기를 알기 위해서는 키값 사용 등 직접 판별해야함
      1. 키값으로 모든 데이터 타입 허용
      2. 삽입된 순서대로 정렬
      3. map.size로 크기를 바로 알 수 있음
      4. 맵 자체로 순회 가능
  5. Nullish 연산자
    1. 여러 개의 피연산자 중 값이 확정되어 있는 피연산자를 찾는 연산 수행
    2. a = undefined, b = null, c = ‘Hello’일 때 a ?? b ?? c 와 같이 사용하면 c의 ‘Hello’ 출력됨
  6. 전개구문
    1. 문제 : 전개구문을 사용하여 const arr1 = [1, 2, 3], const arr2 = [4, 5, 6]일 때 전개구문을 사용하여 하나의 배열로 만들어라
  7. 문자열 심화 메서드
    1. trim : 문자열의 앞쪽과 뒤쪽의 공백을 제거한다.
    2. trimStart, trimEnd : 문자열의 앞,뒤쪽 공백을 제거한다.
    3. trimLeft, trimRight : 위 trimStart, trimEnd와 기능적으로 동일하다.
    4. repeat : 문자열을 주어진만큼 반복해 이어붙인 새로운 문자열 반환
    5. padStart, padEnd : 문자열을 지정한 크기로 만들고 빈칸을 지정한 문자열로 채운 문자열을 반환한다.
    6. indexOf : 주어진 키워드 값을 문자열에서 검색하여 일치하는 첫번째 인덱스를 반환, 일치하는 값이 없는 경우 -1반환
    7. includes : 주어진 키워드값을 문자열에서 검색하여, 일치하는 값을 찾은 경우 true, 찾지 못한 경우 false를 반환
    8. startsWith, endsWith() : 주어진 문자열로 시작하거나 끝나는 경우 true를 반환하고 아닌경우 false를 반환
    9. replace : 주어진 패턴과 일치하는 첫 번째 부분을, 주어진 문자열로 교체한 새로운 문자열 반환
    10. replaceAll : 주어진 패턴과 일치하는 모든 부분을, 주어진 문자열로 교체한 새로운 문자열 반환
    11. substring : 문자열의 주어진 시작 인덱스부터 주어진 종료 인덱스의 이전 인덱스 까지를 새로운 부분 문자열로 반환
    12. slice : 주어진 인자에 따라 문자열의 일부를 추출해 새로운 문자열로 반환
    13. substring, slice 차이
      1. substring은 start > end일 때 substring은 start와 end를 바꿔서 결과를 계산하지만 slice는 빈문자열을 반환
      2. start, end가 음수일 경우 substring은 0으로 치환하지만 slice의 경우 거꾸로 계산을 수행함
    14. split : 문자열을 주어진 구분자를 기준으로 자른 뒤 그 결과를 배열로 반환(만약 ‘’와 같이 지정하면 모든 글자를 잘라서 반환)
  8. 배열 심화 메서드
    1. isArray : 주어진 인자가 배열이면 true, 배열이 아니라면 false를 반환
    2. from : 반복 가능한 객체 또는 유사 배열 객체를 복사해 새로운 배열 객체를 반환, 2번째 인자로 함수를 전달하면 배열내 모든 값들이 함수를 거쳐서 반환됨
    3. of : 인자의 개수나 데이터 타입에 무관하게 가변적인 인자를 가지는 새로운 배열을 반환(쉽게보면 인자로 받은 값들로 배열을 만들어 반환)
    4. Array(), Array.of() : 둘다 인자로 받은 값을 배열로 만들어 반환하지만1개만 인자로 받은 경우 Array는 length가 3인 빈 배열을 반환하고 Array.of는 length 1의 3만 가진 배열을 반환한다.
    5. push, pop : push는 배열의 끝에 하나 이상의 요소를 추가하고, 변경된 배열의 length를 반환하고, pop은 배열의 끝에서 하나의 요소를 제거하고 해당 요소를 반환
    6. unshift, shift : unshift는 배열의 앞쪽에 하나 이상의 요소를 추가하고 변경된 배열의 길이를 반환, shift는 배열의 첫번째 요소를 제거하고 제거한 요소를 반환
    7. forEach : 주어진 함수를 배열 요소 각각에 대해 실행하는 메서드로, 필수 인자로 실행할 함수 요구됨, 인자로는 배열의 값과 인덱스 넘겨짐
    8. includes : 배열이 주어진 요소를 포함하는지 여부에 따라 true 또는 false반환
    9. find : 주어진 판별 함수를 만족하는 첫 번째 요소의 값을 반환, 이때 값을 찾지 못한 경우 undefined를 반환
    10. findIndex : find와 유사하게 작동하지만 반환값이 조건을 만족하는 요소의 인덱스를 반환, 만족하는 요소가 없다면 -1을 반환
    11. sort : 배열을 정렬한 다음 정렬된 배열을 반환(정렬의 기준이 유니코드 순서이기 때문에 숫자정렬의 경우 정확하지 않으며, 반환되는 배열은 새로운 배열이 아닌 원본 배열이 수정됨), 숫자배열 정렬을 위해서는 sort((a, b) ⇒ a - b)와 같이 하면 됨
    12. fill : 배열을 지정한 값으로 채우며 원본 배열을 수정, 필수 인자인 배열을 채울 값과 선택 인자인 시작 인덱스, 끝 인덱스를 가짐
    13. slice : 배열의 복사본을 조각 내 새로운 배열로 반환, 선택적으로 시작 인덱스와 종료 인덱스를 가짐(아무것도 입력하지 않을 경우 복사하여 새로운 배열로 반환)
    14. splice : 필수 인자로 시작 인덱스가 요구됨, 선택 인자로 배열에서 제거할 요소의 개수와 배열에 추가할 요소를 가지며 splice는 원본 배열 자체를 수정
    15. join : 배열의 모든 요소를 이어붙여 하나의 문자열로 반환, 선택적으로 각각의 요소를 구분할 문자를 인자로 가짐
    16. concat : 인자로 주어진 배열을 기존 배열에 합쳐 새로운 배열로 반환
    17. map : 배열의 모든 요소들에 각각 주어진 함수를 실행한 뒤 그 결과들을 모아 새로운 배열로 반환, 필수인자로 실행할 함수 요구됨(map과 forEach는 기능이 동일하지만 forEach는 반환값이 없지만 map은 새로운 배열을 반환함
    18. filter : filter는 주어진 판별 함수의 결괏값이 참인 요소들만을 모아 새로운 배열로 반환하며, 필수 인자로 실행할 함수가 요구된다.
    19. reduce : 필수 인자로 리듀서 함수를, 선택 인자로 리듀서 함수에 제공할 초깃값을 가질 수 있으며, 배열의 각 요소에 대해 주어진 리듀서 함수를 실행한 뒤, 하나의 값을 반환
    20. reverse : 배열내의 데이터를 거꾸로 정렬한 배열을 반환
  9. 객체 심화
    1. 메서드 축약 표현 : 객체는 변수나 값 외에도 함수를 프로퍼티로 가질 수 있는데, 이렇게 객체의 프로퍼티로 선언된 함수를 메서드라고 부름(객체 메서드에서 객체 프로퍼티에 접근하기 위해서는 this를 사용해서 접근)
    2. for in : 객체의 키 개수만큼 반복하여, 첫 번째 키값부터 마지막 키값까지 순회할 수 있는 반복문이다. 배열에서도 사용할 수 있지만 권장되지 않음 배열에서는 forEach, map을 권장
    3. Object.keys() : 주어진 객체의 키값들을 배열로 반환
    4. Object.values() : 주어진 객체의 값들을 배열로 반환
    5. Object.entries() : 프로퍼티를 각각의 배열로 반환하며, 전체 객체는 프로퍼티 배열들의 배열로 표현
    6. hasOwnProperty() : 객체가 주어진 프로퍼티를 가지고 있는지 여부를 true, false로 반환
    7. 선택적 연결 연산자(?.) : 존재하지 않을 수도 있는 프로퍼티에 안전하게 접근할 수 있도록 해주는 연산자이며 만약 data.user?.name의 경우 user가 null인 경우 undefined를 반환한다.
    8. 프로퍼티 키 동적 생성 : 객체의 프로퍼티를 생성할 때, 프로퍼티의 값은 동적으로 생성가능(예 = num: 2 * 3) 하지만 키를 동적으로는 사용할 수 없으며 사용하기 위해서는 대괄호로 감싸야한다.
  10. Set 심화
    1. 배열과의 차이점
      1. 셋은 중복을 허용하지 않음
      2. 셋은 인덱스의 개념이 없음
      3. 셋은 키와 값이 같음
    2. add : 셋 요소의 끝에 주어진 값을 추가(추가하려는 값이 중복인 경우 무시)
    3. delete : 주어진 값을 셋에서 제거하며 제거에 성공하면 true, 제거에 실패하면 false를 반환
    4. has : 주어진 값이 존재하는지에 따라 true, false를 반환
    5. clear : 셋에 들어있는 모든 요소를 제거하고 비어있는 상태로 만듦
    6. size : 배열의 length와 같이 셋에 저장된 요소의 개수를 반환
    7. forEach : 셋을 배열과 거의 동일한 구조로 forEach사용 가능
  11. Map 심화
    1. 객체와의 차이점
      1. 맵은 순서를 보장
      2. 맵은 반복이 가능한 객체
      3. 맵은 모든 데이터 타입의 키를 허용
      4. 맵은 키를 문자열로 취급하지 않음
    2. set : 주어진 키와 값을 맵에 추가
    3. get : 인자로 전달받은 키에 해당하는 값을 반환, 이때 만약 해당 키가 맵에 존재하지 않을 경우 undefined를 반환
    4. has : 인자로 전달받은 키가 맵에 존재하는지에 따라 true, false 반환
    5. delete : 인자로 전달받은 키에 해당하는 값을 삭제하고 삭제 여부를 true, false로 반환
    6. clear : 맵에 들어있는 프로퍼티를 모두 제거하고 빈 상태로 만듦
    7. size : 맵에 저장된 요소의 개수를 반환
  12. Class
    1. 클래스도 함수처럼 표현식으로 작성될 수 있음(const User = class {})
    2. javaScript에서 클래스의 필드는 public, private 두 가지 타입으로 생성할 수 있으며 기본값은 public이다. private로 지정하기 위해서는 #을 앞에 붙인다(#age = 20)
    3. static 메서드 : 인스턴스의 생성 없이도 해당 메서드를 사용할 수 있다
    4. 상속 : 상속할 때 키워드는 extends를 사용하며, 상위 클래스의 모든 것에 접근할 수 있다.
    5. instanceof : 좌변에 주어진 대상이 우변에 주어진 클래스의 인스턴스인지에 따라 true, false를 반환
    6. 생성자 오버라이딩 : 생성자에 대한 오버라이딩을 할 때에는 super()를 호출해야 오류가 없고, 이렇게 하면 부모 클래스의 생성자 함수와 자식 클래스의 생성자 함수 모두 실행된다. 만약 부모 생성자 함수에서 인자를 원하면 super함수에도 인자를 넣어줘야함
  13. 배열 구조 분해
    1. 기존에는 배열 내부의 값을 새로운 변수에 할당하고자 하면 각각 할당해야함
    2. 이때 배열에 구조 분해 할당을 사용해 변수를 선언하고 할당하는 과정을 한번에 해결할 수 있다.
    3. const [one, two, three] = [1, 2, 3, 4, 5];
    4. 기본값 지정 const [one = 1, two = 2] = [’하나’];
    5. 중간 값 생략 const [one, , three] = [1, 2, 3, 4, 5];
    6. 나머지 요소 const [one, two, …three] = [1, 2, 3, 4, 5];
    7. 변수 값 교환 let a = 123; let b = 456; [a, b] = [b, a];
  14. 객체 구조 분해
    1. 배열 구조 분해 방식과 동일함
    2. 단. 할당할 변수의 이름을 자유롭게 정할 수 있는 배열 구조 분해와 달리, 객체를 할당할 때는 분해하려는 프로퍼티의 키를 사용해야함
    3. 변수이름을 변경하기 위해서는 (키): (원하는 변수명) 처럼 사용하면 된다.
    4. const { data } = fetch(’’);
  15. 이벤트 전파
    1. 어떤 요소에서 발생한 이벤트는 부모 또는 자식에세 전파됨 이벤트리스너 3번째 인자가 true일 경우 캡쳐링방식, false일 경우 버블링방식
    2. 버블링 : 이벤트가 발생한 요소부터 최상단 조상 요소까지 발생한 이벤트가 전파되는 방식
    3. 캡쳐링 : 버블링과 반대로 최상단 조상 요소부터 이벤트 발생한 요소까지 이벤트 전
  16. 모듈(하나의 js파일)
    1. 코드를 모아둔 하나의 파일로, 재사용성 및 유지 보수성을 위해 사용됨, 일반적으로 큰 목적 하나를 달성하기 위한 관련 조각 코드들, 함수들의 모음, 하나의 클래스로 구성
    2. 모듈은 import, export 명령어를 사용해 서로 다른 파일에서 가져오거나 내보낼 수 있다.
    3. 모듈을 가져오려면 script 태그에 type=”module”을 작성해야한다.