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