본문 바로가기

JavaScript

39. 옵셔널 체이닝(Opthional Chaining)

옵셔널 체이닝(Opthional Chaining)

- ECMA Script 11버전에 추가
- null 또는 undefined를 확인할 때 쓰이는 연산자
- ?., ??

 

논리 연산자 사용 예제
// 논리 연산자(&&, ||)
const obj1 = {name:'김사과'};
const obj2 = {name:'반하나', lover:'이메론'};
const bool1 = false;

// obj1과 obj2 둘다 값이 있으므로
if(obj1 || obj2){
    console.log("둘 다 또는 둘중에 하나가 True");
}

// 객체간의 논리연산자

// and 연산
let result = obj1 && obj2;
console.log(result); //{name: '반하나', lover: '이메론'}

// or 연산
result = obj1 || obj2;
console.log(result); // {name: '김사과'}

function changeLover(obj) {
    if(!obj.lover){
        throw new Error("애인이 없음");
    }
    obj.lover = "애인이 바뀜";
}

function makeNewLover(obj) {
    if(obj.lover){
        throw new Error("애인이 있음");
    }
    obj.lover = '새로운 애인이 생김';
}

// obj1.lover가 false이기 때문에, 함수가 실행안됨
obj1.lover && changeLover(obj1);
console.log(obj1); // {name: '김사과'}

// obj2.lover가 true이기 때문에, 함수가 실행됨
obj2.lover && changeLover(obj2);
console.log(obj2); // {name: '반하나', lover: '애인이 바뀜'}


// 기본값을 설정
// 자바스크립트의 default parameter: undefined
function print(message) {
    const text = message || "hello"; // or 연산은 앞의 값이 true면 뒤로 안넘어감
    console.log(text);
}
print('안녕'); // 안녕
print(); // hello
print(undefined); // hello
print(null); // hello
print(''); // hello
옵셔널 체이닝 예제
// null 또는 undefined인 경우를 확인할 때
let item = {price: 1000};
const price = item && item.price;
console.log(price); // 1000

let item2 = {price:1000};
const price2 = item2?.price; // item && item.price와 같은 의미
console.log(price2);  // 1000

let banana = {name:"반하나", lover:{name:"오렌지"}};

function printLoverName(obj) {
    const loverName = obj?.lover?.name;
    console.log(loverName);
}
printLoverName(banana); // 오렌지

let num = 0;
console.log(num || '-1');
console.log(num ?? '-1'); // null, undefiend 값을 0이라고 생각함 ??: 대체값
console.log(banana.lover?.name ?? '이메론'); // name이 있다면 name를 찍어주고 없으면 이메론

'JavaScript' 카테고리의 다른 글

41. JSON(JavaScript Object Notation)  (0) 2023.04.14
40. async / await  (0) 2023.04.14
38. 프로미스(Promise)  (0) 2023.04.13
37. 예외처리  (0) 2023.04.13
36. 맵(map)  (0) 2023.04.13