없을 수 있는 중첩 값에 안전하게 접근하고 정확한 기본값을 선택합니다.
optional chaining은 왼쪽 값이 null 또는 undefined이면 평가를 멈추고 undefined를 반환합니다. ??는 null과 undefined에만 기본값을 적용해 0, false, 빈 문자열을 보존합니다. 값이 반드시 있어야 하는 상황에서 오류를 숨기는 용도로 남용하지 않습니다.
첫 사용자는 profile이 있어 이름 민수와 점수 0을 그대로 읽고, score가 0이어도 ??는 그 값을 미입력으로 바꾸지 않습니다. 두 번째 빈 객체는 user.profile이 undefined라 ?.가 그 자리에서 평가를 멈추고 undefined를 돌려주며, ??가 이름 없음과 미입력을 채웁니다. 결과는 민수: 0, 이름 없음: 미입력입니다.
?.는 함수 호출과 대괄호 접근에도 씁니다. user.greet?.()는 greet가 없으면 호출하지 않고 undefined를 돌려주고, users?.[0]은 배열 자체가 없을 때 안전하게 멈춥니다. 다만 user.profile?.name에 값을 대입하는 것처럼 대입식의 왼쪽에는 쓸 수 없어 문법 오류가 납니다.
||를 기본값에 쓰면 유효한 0, false, 빈 문자열도 대체됩니다. 데이터 의미에 맞춰 ??와 구분하세요.
직접 바꿔보세요profile 자체가 null인 사용자를 추가하고 결과를 확인하세요.