es6 최신 문법,
null 병합 연산자에 대해
알아봅니다.
null 병합 연산자 '??' (nullish coalescing operator)
es6에서 새로 나온 문법 null 병합 연산자를 이용하여
매우 짧은 문법으로 코드를 심플하게 작성할 수 있습니다.
사용 방법
a ?? b //a가 null 또는 undefined 일때 b
- 해석: 변수 a의 값이 null도 아니고, undefined가 아니면 a, 그 외에는 b
- 왼쪽 코드(a)가 null 또는 undefined일 경우, 오른쪽 코드(b)가 실행
- a ? "a" : "b"와 같은 형식의 삼항 연산자와 비슷한 문법
- x = a ?? b와 동일한 코드를 삼항 연산자로 나타내면, x = (a !== null && a !== undefined) ? a : b;
- a와 b는 value 뿐만 아니라 함수로 사용
- a() ?? b() //a 함수의 값이 null 또는 undefined일때 b 함수를 실행
나쁜 코드
const msg = (item) => {
let message = item;
if (item == null || item == undefined) {
message = "none";
}
console.log(message)
};
msg("kk"); //kk
msg(); //none
null 병합 연산자를 사용한 좋은 코드
null 병합 연산자 '??'를 이용하여 코드를 절반으로 줄일 수 있고, 가독성도 뛰어납니다.
const msg = (item) => {
const message = item ?? "none"; //item이 있으면 item을 출력하고, null 이나 undefinded일때 none 출력
console.log(message);
};
msg("kk"); //kk
msg(); //none
msg(null); //none
msg(undefined); //none
여기서 null 병합 연산자와 기본값 매개변수(default parameter)의 차이점을 알아봅니다.
기본값 매개변수 (default parameter)
매개변수 값이 없거나 undefined일 경우에만 매개변수에 기본값을 줄 수 있습니다.
const msg = (item = "none") => {
console.log(item);
};
msg(); //none
msg(null); //null - null일 경우 default 값이 전달안됨
msg(undefined); //none
정리
null 병합 연산자일 경우 변수가 null, undefined일 경우 두번째 문장(조건)이 실행되고,
기본값 매개변수의 경우에는 undefined일 경우에만 default 값이 실행됩니다.
or 연산자 '||' (logical or operator)
사용 방법
a || b //a가 false 일때 b
- false인 경우 해당하는 것들: false, null, undefined, NaN, 0, -0, " ", ' ', ``(빈 문자열)
const msg = (item) => {
const message = item || "none"; //item이 있으면 item을 출력하고, false 일때 none 출력
console.log(message);
};
msg("kk"); //kk
msg(); //none
msg(null); //none
msg(undefined); //none
msg(0); //none
msg(""); //none
msg(``); //none
?? (null 연산자) 와 || (or 연산자) 의 차이
- null 병합 연산자는 OR 연산자 ||와 상당히 유사
- ?? 의 경우는 undefined, null의 경우에만 오른쪽 문장이 실행
- ||의 경우는 false인 모든 경우에만 오른쪽 문장이 실행되므로 서로 다른 결과값을 나타낼 수 있습니다.
반응형
'개발 > Javascript' 카테고리의 다른 글
[js] 스크롤 이동, 스크롤 현재 위치 (ft. scrollTop, scrollIntoView) (0) | 2021.09.03 |
---|---|
[js] set 객체 사용법 (ft. new Set 중복값 제거) (0) | 2021.08.30 |
[ts] Property 'x' does not exist on type '{}'.ts (0) | 2021.07.20 |
[js] 현재 날짜, 시간 가져오기(ft. 월, 일, 요일, 시간) (0) | 2021.07.13 |
[js] Redux 리덕스의 기본 원리(ft. 바닐라 자바스크립트 예제) (0) | 2021.07.11 |
댓글