이번 질문은 javascript에서 빈 배열 값(const arr = []
)을 인덱스로 참조할 때(arr[0]
) undefined로 평가되는데, 왜 reduce를 적용하려 하면 NaN이 아니라 Type Error가 발생하는지 궁금하다는 내용이었습니다.
MDN에 찾아본 결과, 초기값이 없는 빈 배열에 대해 reduce를 실행하는 경우 TypeError를 반환한다고 나와있습니다. 링크
Array.prototype.reduce에 spec을 보면 해당 메서드가 호출됐을 때 실행되는 동작이 단계별로 나옵니다. 이 단계에서 4번을 보시면 길이가 0이거나 초기값이 존재하지 않는 배열인 경우 TypeError를 반환한다고 합니다.
즉, undefined 값을 평가해서 콜백함수에 전달하기 전에 저런 예외사항이 발견되면 즉시 예외를 반환하도록 방지 처리가 되어있기 때문입니다. 링크
이거 오랜만에 보네요. 재훈님 덕분에 spec을 봐야 한다는 걸 배웠습니다. 다시 한 번 감사해요!