https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Optional_chaining
This is an experimental technology Check the Browser compatibility table carefully before using this in production.
optional chaining 연산자 ?.
는 체인의 각 참조가 유효한지 명시적으로 검증하지 않고, 연결된 객체 체인 내에 깊숙이 위치한 속성 값을 읽을 수 있다. ?.
연산자는 .
체이닝 연산자와 유사하게 작동하지만, 만약 참조가 nullish (en-US) (null
또는 undefined
)이라면, 에러가 발생하는 것 대신에 표현식의 리턴 값은 undefined
로 단락된다. 함수 호출에서 사용될 때, 만약 주어진 함수가 존재하지 않는다면, undefined
를 리턴한다.
이것은 참조가 누락될 가능성이 있는 경우 연결된 속성으로 접근할 때 더 짧고 간단한 표현식이 생성된다. 어떤 속성이 필요한지에 대한 보증이 확실하지 않는 경우 객체의 내용을 탐색하는 동안 도움이 될 수 있다.
obj?.prop
obj?.[expr]
arr?.[index]
func?.(args)
optional chaining 연산자는 참조나 기능이 undefined
또는 null
일 수 있을 때 연결된 객체의 값에 접근하는 단순화할 수 있는 방법을 제공한다.
예를 들어, 중첩된 구조를 가진 객체에서 obj
가 있다. optional chaining이 없이 깊이 중첩된 하위 속성을 찾으려면, 다음과 같이 참조를 확인해야 한다:
let nestedProp = obj.first && obj.first.second;
obj.first
의 값은 obj.first.second
의 값에 접근하기 전에 null
(그리고 undefined
)가 아니라는 점을 검증한다. 이는 만약에 obj.first
를 테스트 없이 obj.first.second
에 직접 접근할 때 일어날 수 있는 에러를 방지한다.
그러나 optional chaining 연산자(?.
)를 사용하여, obj.first.second
에 접근하기 전에 obj.first
의 상태에 따라 명시적으로 테스트하거나 단락시키지 않아도 된다:
let nestedProp = obj.first?.second;
.
대신에 ?.
연산자를 사용함으로써, 자바스크립트는 obj.first.second
에 접근하기 전에 obj.first
가 null
또는 undefined
가 아니라는 것을 암묵적으로 확인하는 것을 알고 있다. 만약 obj.first
가 null
또는 undefined
이라면, 그 표현식은 자동으로 단락되어 undefined
가 반환된다.
이는 다음과 같다:
let nestedProp = ((obj.first === null || obj.first === undefined) ? undefined : obj.first.second);
존재하지 않을 수 있는 매서드를 호출할 때, optional chaining을 사용할 수 있다. 예를 들어, 구현 기간이나 사용자 장치에서 사용할 수 없는 기능 때문에 메서드를 사용할 수 없는 API를 사용할 경우, 유용할 수 있다.