study
옵셔널 체이닝 연산자 / null 병합 연산자
kim-hasa
2022. 3. 6. 16:17
옵셔널 체이닝 연산자 ?.
ES11(ECMAScript2020) 에서 새로 도입된 옵셔널 체이닝 연산자 ?. 는 좌항의 피연산자가 null 또는 undefined인 경우 undefined를 반환하고 , 그렇지 않으면 우항의 프로퍼티 참조를 이어간다.
var elem = null;
var value = elem && elem.value; //elem이 falsy -> elem , 아니면 elem.value
console.log(value); // null
-----------------------------------------------------------------------------
var elem = null;
var value = elem?.value; // elem이 null 또는 undefined -> undefined
console.log(value); // undefined
객체를 가리키기를 기대하는 변수가 null 또는 undefined 가 아닌지 확인하고, 프로퍼티를 참조할 때 유용하다. 하지만 , &&연산자의 경우 좌항의 falsy 값인 0과 ''가 객체로 평가되는 경우도 있다.
var str = '';
var length = str && str.length; // str의 길이
console.log(length); // '' 출력 , 문자열의 길이를 출력하지는 않는다.
옵셔널 체이닝 연산자는 좌항 연산자가 falsy 값이라도 null 또는 undefined가 아니면 우항을 참조한다.
var str = '';
var length = str?.length;
console.log(length); // 0 출력
null 병합 연산자 ??
역시 ES11 에서 도입된 null 병합 연산자 ?? 는 좌항의 피연산자가 null 또는 undefined인 경우 우항을 반환하고 , 그렇지 않으면 좌항을 반환한다. 변수의 기본값을 설정할 때 유용하다.
var foo = null ?? 'default string';
console.log(foo); // "default string";
?? 가 도입되기 전에는 ||를 사용해서 변수의 기본값을 설정했는데 , 역시 fasly값 중 ''과 0인 경우가 있어서 원치 않은 결과값을 반환할 수 있다.
var foo = '' || 'default string';
console.log(foo); // "default string", ''이 falsy값으로 읽히는 문제
----------------------------------------------------------------------
var foo = '' ?? 'default string';
console.log(foo); // "";