1. What I learned today
함수 (Function)
- 함수 선언문 (Declaration)
function hello() {}
function
이름을 지정하여 선언하는 방법
- 함수 표현식 (Expression)
const hello = function () {}
- 할당을 통해 변수에 넣는 방법
- 호이스팅 (Hoisting)
- 호이스팅 : 인터프리터가 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미 (함수가 유효한 범위 내에서 가장 위로 올라가 선언된다.)
- 함수 표현식에서는 호이스팅이 발생하지 않는다.
- 반환 및 종료
return
키워드를 통해 함수가 종료되며 호출된 자리에 return
키워드로 설정한 data를 반환한다.
return
키워드가 실행되며 함수는 종료된다.
- 매개변수 패턴
- 함수는 매개 변수를 여러 개 입력 받을 수 있지만 입력이 들어오지 않을 경우를 대비하여 기본 값을 설정 할 수 있다.
function sum(a, b = 1)
- 두 번째 매개 변수 b가 들어오지 않는 호출(
sum(5)
)도 함수 사용이 가능할 것이다.
- 객체 구조 분해 할당
function getName({ name = '이름이 없습니다' }){}; getName(objUser);
objUser
객체를 인수로 넣고 매개변수로 name
속성의 값만 받아올 수 있다.
- 마찬가지로 기본 값을 지정할 수 있다.
- 배열 구조 분해 할당
function getItem([, b]) {};
,
를 통해 인덱스를 다음으로 넘기고 원하는 인덱스만 가져올 수 있다.
- 나머지 매개변수
- 가변적으로 매개변수를 사용할 수 있도록 하는 방법
function sum(...rest)
...rest
와 같이 전개 방식으로 매개변수를 가변적으로 받을 수 있다.
- 함수 내부에
arguments
라는 유사 배열에 자동적으로 매개변수의 정보가 저장된다.
- 화살표 함수
function
키워드를 사용하지 않고 단순하게 함수를 만들 수 있는 방법
const sum = (a, b) => {return a + b}
- 화살표 함수에서
return
을 바로 하는 경우 중괄호와 키워드를 생략할 수 있다.
=>
를 기준으로 왼쪽은 매개변수, 오른쪽은 함수의 실행 영역이다.
- 즉시 실행 함수 (IIFE)
- 함수를 만들자마자 호출이 되는 함수
- 별도의 이름을 지정하지 않고 소괄호 안에 익명함수를 만들고 호출하는 소괄호를 만들면 된다.
((x) => x + y)(3)
- 일반 함수에서의 즉시 실행 함수 패턴
- 두 번째 소괄호에 함수의 인수로 사용할 수 있다.
- 콜백
- 함수가 호출될 때 인수로 들어가는 또 하나의 함수를 말한다.
- 이미지가 load 되는데 얼마나 시간이 드는지 모르기 때문에 콜백을 사용하여 이미지가 load 되면 이미지를 띄울 수 있도록 할 수 있다.
- 재귀
- 함수가 자기 자신을 호출하는 방식
- 종료 조건을 함수 내부에 포함하고 있어야 한다.
- 호출 스케줄링
setTimeout
과 같은 함수를 특정 이벤트가 발생했을 경우 발생하거나, 발생하지 않았을 경우 호출을 시킬지 결정하여 스케줄을 조정할 수 있다.
this
- 일반 함수의
this
는 호출 위치에서 정의
- 화살표 함수의
this
는 자신이 선언된 함수 범위에서 정의
- 함수 표현식을 감싸고 있는 외부 함수를 의미하는 키워드
클래스 (Class)
- prototype
new
생성자를 이용해 만든 인스턴스에서 공통적으로 사용할 수 있는 메서드, 속성을 미리 등록한 것. 사용자가 등록할 수도 있다.
- 한 번의 선언으로 같은 함수의 인스턴스는 모두 사용할 수 있는 메서드, 속성을 등록하여 사용할 수 있어 편리하다. (class 개념으로 보면 된다.)
- Class
class
키워드를 사용하여 prototype
과 같은 개념을 보다 편리하게 구현 할 수 있다.
class User{constructor(a, b){ }}
와 같이 초기화 작업을 할 수 있고 prototype
으로 사용하던 기능을 내부 선언으로 구현할 수 있다
- Getter, Setter
constructor
가 끝난 후에도 현재 인스턴스가 가지고 있는 속성의 변경도 반영할 수 있는 키워드이다.
get
키워드는 인스턴스 내 데이터를 사용하여 메소드 형식으로 class
에 정의하여 사용할 땐 속성처럼 사용하면 된다. (조회의 역할)
set
키워드를 사용하여 인스턴스 내 데이터를 변경(할당)하는 메소드 형식으로 class
에 정의하여 할당 연산자 =
로 변경해주면 된다. (할당의 역할)
class User{
constructor(a, b){
this.a = a;
this.b = b;
}
get fullAtt() {
console.log('get full attiribute');
return `${this.a} is a and ${this.b} is b`;
}
set fullAtt(data) {
console.log('set full attribute');
[this.a, this.b] = data.split(' ');
}
}
const firstIns = new User('hi','hello');
console.log(firstIns.fullAtt);
firstIns.fullAtt = 'Hello Hi';
console.log(firstIns.fullAtt);
- 정적 메소드
- 인스턴스가 아닌 클래스 자체에
.
표기법으로 사용할 수 있는 부가 기능을 만들 때 사용하는 방법
static
키워드를 통해 클래스 자체에서 호출할 수 있는 메소드를 만들 수 있다.
- 각각의 인스턴스에서는 정적 메소드 사용이 불가능하다.
- 상속
- 선언된
class
의 속성과 메소드를 이어 받아 원하는 기능을 추가, 변경이 가능하도록 사용하는 방법
class B extends A
와 같이 extends
키워드를 사용하여 상속받을 수 있다.
- 상속받은
class
에서 부모의 기능을 사용할 땐 super()
메소드 내부에 부모의 속성에 접근, 할당 할 수 있다.
- 메소드를
override
하여 상속받은 메소드를 자식 클래스에서 변경하거나 기능을 추가하여 사용할 수 있다.
instanceof
키워드로 해당 인스턴스가 특정 클래스의 인스턴스인지 확인할 수 있다.
instanceof
constructor
instanceof
키워드는 해당 인스턴스가 부모/조상 관계를 가진 class에 대해서도 true
반환
constructor
키워드를 통해 인스턴스 해당 class
만 찾아낼 수 있다.
c.constructor === C
arr.constructor === Array
표준 내장 객체
- 문자
.length
: 문자열의 길이를 갯수로 확인한다.
.includes
: 대상 문자열에 인수로 주어진 문자(열)이 포함되어 있는지 확인한다.
- 두번째 인수로 숫자
n
을 줄 경우 n번째 index부터 포함되는지 확인한다.
.indexOf
: 대상 문자에 주어진 문자(열)가 일치하는 index를 반환
.padEnd
: 첫 번째 인수로 들어간 숫자보다 대상 문자열의 길이가 작을 경우 두 번째 인수로 넣은 글자로 첫번째 인수의 index까지 padding하는 문자열을 생성하여 반환한다. (원본 변경 X)
- 첫 번째 인수보다 길이가 길다면 그대로 반환한다.
.padStart
: 첫 번째 인수로 들어간 숫자보다 대상 문자열의 길이가 작을 경우 두 번째 인수로 넣은 글자를 문자열의 앞에 padding한 문자열을 생성하여 반환한다. (원본 변경 X)
- 첫 번째 인수보다 길이가 길다면 그대로 반환한다.
.replace
: 첫 번째 인수로 들어간 문자(열)을 두 번째 인수에 주어진 문자(열)로 대체하여 새로운 문자열을 반환한다.
- 정규식을 통해 전체에 대해 변환한 문자열을 생성할 수 있다.
str.replace(/hello/g, 'hi')
//해당 문자열의 모든 hello를 hi로 변경
.slice
: 대상 문자열의 일부를 추출해 새로운 문자(열)를 반환한다.
- 이 때 첫 번째 인수부터 두 번째 인수의 직전 인덱스까지만 추출
str.slice(0, 5) //0 ~ 4 추출
str.slice(6, -1) //6부터 마지막 인덱스 전 글자까지 추출
- 두 번째 인수를 생략하면 해당 인덱스부터 끝까지 추출한다.
str.slice(6)//6 ~ 마지막 추출
.split
: 대상 문자를 주어진 구분자로 나눠 배열 데이터로 반환한다.
.toLowerCase
.toUpperCase
: 대상 문자열을 영어 소/대 문자로 변환하여 새로운 문자열로 반환한다.
.trim
: 대상 문자열의 앞 뒤 공백 문자(space, tab)을 제거한 새로운 문자열로 반환한다.
- 숫자
.toFixed
: 숫자를 지정된 고정 소수점 표기까지 표현하는 문자열로 반환합니다.
- 숫자로 다시 활용하기 위해선
parseFloat(num.toFixed(2))
와 같이 변환하여야 한다.
.toLocaleString
: 숫자를 현지 언어 형식의 문자열로 반환한다.
Number.isInteger
: 숫자가 정수인지 확인한다.
- 정적 메소드이므로
Number
클래스로 사용 가능하다.
Number.isNaN
: 숫자가 NaN
인지 확인한다.
Number.parseInt
parseInt
: 주어진 데이터(숫자, 문자)를 파싱하여 특정 진수의 정수로 반환한다.
- 첫 번째 인수에 해당 데이터, 두 번째 인수에 진법(radix)를 넣어 사용한다.
- 전역 함수로도 제공하기 때문에
Number.
을 제거해 사용할 수 있다.
Number.parseFloat
parseFloat
: 주어진 데이터를 파싱해 부동 소수점 실수로 반환한다.
- 수학
Math
: 수학적인 상수, 함수를 위한 속성 메서드를 지원
Math.abs
: 첫 번째 인수의 절댓값을 반환한다.
Math.ceil
: 첫 번째 인수를 올림해 정수를 반환한다.
Math.floor
: 첫 번째 인수를 내림해 정수를 반환한다.
Math.max
: 주어진 인수들 중 가장 큰 숫자를 반환한다.
Math.min
:주어진 인수들 중 가장 작은 숫자를 반환한다.
Math.pow
: 주어진 첫 번째 인수의 두 번째 인수를 거듭제곱한 값을 반환한다.
Math.random
: 숫자 0 이상, 1 미만의 난수를 반환한다.
Math.round
: 첫 번째 인수를 반올림해 정수를 반환한다.
- 날짜
new Date()
: 시간 관련 생성자 함수
new Date(년도, 월 - 1(zero-base), 일, 시, 분, 초)
.getFullYear
.setFullYear
: 해당 인스턴스의 4자리 format 연도 set / get
.getMonth
.setMonth
: (zero-based) 0 ~ 11 월을 set / get
.getDate
.setDate
.getHours
.setHours
: 날짜/시 set/get
getDay
: 요일을 0~6으로 반환
.getTime
.setTime
: 1970-01-01 (유닉스타임)부터 경과한 시간을 기준으로 ms
로 반환하거나 지정.
- 절대 수치를 비교하여 시간이 더 늦거나 이른 것을 비교할 수 있다.
- 배열
.length
: 배열의 길이를 반환한다. (index 갯수)
.at
: 배열을 인덱싱한다. []
와 같다.
arr.at(arr.length - 1) == arr[arr.length - 1] == arr.at(-1)
.concat
: 대상 배열과 인수로 주어진 배열을 병합해 새로운 배열을 반환한다.
.every
: 대상 배열의 모든 요소가 콜백 테스트에 참을 반환하는지 확인한다.
.filter
: 대상 배열에서 콜백 테스트를 통과한 요소로 구성된 배열을 반환한다.
.find
: 대상 배열에서 콜백 테스트를 통과한 첫 번째 요소를 반환한다.
.findIndex
: find와 같지만 index를 반환한다.
.flat
: 배열 내부의 배열과 같은 구조를 전부 이어붙여 새로운 배열 반환한다.
- 깊이 개념으로 flat에 대한 인수 없는 호출로는
[a, [b]]
만 변경
- 인수로 깊이를 설정하여 이어 붙일 수 있다.
arr.flat(Infinity)
→ 무조건 전부 이어붙인다.
.forEach
: 대상 배열의 길이만큼 콜백을 실행한다.
.join
: 대상 배열의 모든 요소를 인자로 들어온 구분자로 연결한 문자열을 반환한다.
.map
: 대상 배열의 길이만큼 콜백을 실행하고 반환 값을 모아 새로운 배열을 반환한다.
.pop
: 원본 배열의 마지막 요소를 삭제한다.
.push
: 원본 배열에 새로운 요소를 추가한다.
.reduce
: 대상 배열의 길이만큼 콜백을 실행하고, 마지막에 호출되는 콜백의 반환 값을 반환한다.
- 현재 반환 값은 다음 호출 시 인수로 들어간다.
.reverse
: 원본 배열의 요소 순서를 반전한다.
.sort
: 원본 배열의 요소를 콜백의 반환 값에 따라 정렬한다.
- 인수 없이 호출 시 문자열로 변환해 유니코드로 정렬한다.
.splice
: (zero-based index, 제거할 item 수, 삽입할 데이터)
Array.from
: 유사 배열로 배열을 반환한다.
- 객체 데이터를 배열에서 사용할 수 있는 메소드를 사용할 수 있게 해준다.
length
속성이 존재해야하고, key
가 인덱스와 유사한 형태여야한다.
- 객체
Object.assign
: 두 번쨰 인수 객체부터 가변인자까지를 첫 번째 인자 객체에 속성을 복사하여 반환한다.
- 대상 객체에 이미 있는 속성일 경우 출처 객체의 속성으로 대체된다.
Object.entries
: 인자로 받아온 객체의 key:value
를 2차원 배열로 만들어 반환한다.
Object.keys
: 인자로 받아온 객체의 key
를 배열로 반환한다.
Object.values
: 인자로 받아온 객체의 value
를 배열로 반환한다.
- JSON
- JavaScript Object Notation : 데이터 전달을 위한 표준 포맷
- 문자(
"
만) 사용, 숫자, 불린, Null, 객체, 배열만 사용
.json
확장자 사용
JSON.stringify()
: 데이터를 JSON 문자로 변환
JSON.parse()
: JSON 문자를 분석해 데이터로 변환
2. Code Snippets
function random(min = 0, max = 10) {
return Math.floor(Math.random() * (max - min)) + min;
}
a.sort((a, b) => a - b)
a.sort((a, b) => b - a)
users.sort((a, b) => a.age - b.age)