Javascript : null 병합 연산자, 조건부 연산자, 옵셔널 체이닝
by 담담이담1. null 병합 연산자
왼편의 값이 null이나 undefined이면 오른편 값이 리턴되고,
왼편의 값이 null이나 undefined이 아니면, 왼편 값이 리턴된다.
const example1 = null ?? 'I'; // I
const example2 = undefined ?? 'love'; // love
const example3 = 'you' ?? 'JavaScript'; // you
console.log(example1, example2, example3); // I love you
OR 연산자(||)와 헷갈릴 수도 있지만,
OR 연산자는 왼편의 값이 falsy한지 확인한다는 점에서 다르다.
2. 조건부 연산자
삼항 연산자라고도 불리며,
자바스크립트에서 유일하게 세 개의 피연산자를 가진다.
조건 ? truthy 할 때 표현식 : falsy 할 때 표현식
const cutOff = 80;
const passChecker = (score) => score > cutOff ? '합격입니다!' : '불합격입니다!';
console.log(passChecker(75));
if 문보다는 간결하지만, 내부에 함수나 변수를 선언하거나
반복문 같은 표현식이 아닌 문장은 작성할 수 없다는 한계가 있다.
(표현식이란? 결과적으로 하나의 값이 되는 코드를 가르킨다.)
3. 옵셔널 체이닝
function printCatName(user) {
console.log(user.cat.name);
}
const user1 = {
name: 'Captain',
cat: {
name: 'Crew',
breed: 'British Shorthair',
}
}
printCatName(user1); // Crew
const user2 = {
name: 'Young',
}
console.log(user2.cat); // undefined
printCatName(user2); // TypeError: Cannot read property 'name' of undefined
이렇게 중첩된 객체의 프로퍼티에 접근하고자 할때
user1과 다르게
user2.cat.name에 접근할 때
user2는 cat 프로퍼티를 가지고 있지 않기에 undefined를 리턴받고
거기서 name에 접근하고자 하면 에러가 발생한다.
따라서 user.cat.name에 접근하기 전에
user.cat이 null이나 undefined가 아님을 검증하기 위해
옵셔널 체이닝을 사용한다.
function printCatName(user) {
console.log(user.cat?.name);
}
위 코드에서 볼 수 있는 것처럼
물음표와 마침표를 붙여 사용하는 부분이 바로 옵셔널 체이닝 연산자(?.)이다.
만약 옵셔널 체이닝 연산자 왼편의 프로퍼티 값이
1) undefined 또는 null이 아니라면 그다음 프로퍼티 값을 리턴하고
2) 그렇지 않은 경우에는 undefined를 반환하는 문법입니다.
옵셔널 체이닝 연산자의 동작 원리를 삼항 연산자를 통해 구체적으로 표현하면 다음과 같이 작성할 수 있다.
function printCatName(user) {
console.log((user.cat === null || user.cat === undefined) ? undefined : user.cat.name);
}
null 병합 연산자와 함께 활용하면 다음과 같이 응용할 수도 있다.
function printCatName(user) {
console.log(user.cat?.name ?? '함께 지내는 고양이가 없습니다.');
}
const user2 = {
name: 'Young',
}
printCatName(user2); // 함께 지내는 고양이가 없습니다.
'Javascript' 카테고리의 다른 글
Javascript : Spread 구문과 Destructuring(구조 분해) (0) | 2023.10.02 |
---|---|
Javascript : 객체의 프로퍼티 접근 방식과 모던한 프로퍼티 표기법 (0) | 2023.10.01 |
Javascript : JS에서의 함수 (1) | 2023.10.01 |
Javascript : AND와 OR의 동작방식 (feat. truthy, falsy한 값) (2) | 2023.09.30 |
Javascript : 이벤트 핸들러 (0) | 2023.09.27 |
블로그의 정보
유명한 담벼락
담담이담