같은 자료라도 검색의 비교 규칙이 다릅니다
가상 계산 결과 [4, NaN, 12]에 유효한 수가 아닌 값이 하나 들어 있습니다. NaN은 낸(Not a Number, 수가 아님)이라고 읽는 자바스크립트의 특수한 숫자 값입니다. AI가 배열의 indexOf(NaN)이 −1이므로 NaN이 없다고 설명했다면, 배열과 메서드의 비교 규칙을 함께 살펴야 합니다.
인덱스 오브(indexOf, 일치하는 첫 위치 찾기)는 엄격한 같음 비교를 사용합니다. NaN은 이 비교에서 자기 자신과도 같지 않으므로 NaN === NaN은 거짓입니다. 따라서 배열에 NaN이 들어 있어도 indexOf(NaN)은 찾지 못했다는 −1을 반환합니다.
포함 여부를 묻는 includes를 실행합니다
인클루즈(includes, 포함 여부 확인)는 세임 밸류 제로(SameValueZero)라는 규칙을 사용합니다. 이 규칙에서는 NaN끼리 일치하므로 [4, NaN, 12].includes(NaN)은 참입니다. 메서드가 틀린 답을 낸 것이 아니라, 서로 다른 비교 규칙에 따라 결과가 달라진 것입니다.
활동에서 NaN이 있는 배열과 없는 배열을 바꾸고 찾을 값도 선택하세요. 숫자 12는 두 검색에서 모두 발견되지만 문자열 "12"는 발견되지 않습니다. includes도 숫자와 문자열을 자동으로 같은 값으로 바꾸지 않습니다. 위치는 0부터 세므로 숫자 12의 위치는 2입니다.
반환값의 자료형도 질문에 맞추어 읽습니다
숫자 4를 찾으면 indexOf는 위치 0을 반환하고 includes는 참을 반환합니다. 위치 0을 조건문에서 거짓으로 읽어 ‘없다’고 처리하면 첫 항목을 놓칩니다. 위치를 쓰는 쪽은 −1과 비교하는지, 포함 여부만 필요한 쪽은 불리언을 받는지 확인해야 합니다.
NaN 검색은 두 메서드를 서로 바꾸어도 되는지 점검하는 반례입니다. 숫자 4와 12만 시험하면 두 방식이 언제나 같은 포함 여부를 준다고 생각하기 쉽습니다. 이 활동처럼 특수값과 자료형이 다른 값을 추가하면 설명이 성립하는 범위를 더 정확하게 정할 수 있습니다. 이것은 배열이 가진 모든 종류의 값을 검사했다는 뜻은 아닙니다.
수치 오류의 존재와 원인을 따로 확인합니다
화면은 NaN을 글자 그대로 표시합니다. 배열을 JSON으로 바꾸면 다른 표시가 될 수 있으므로, 여기서는 각 값의 자료형을 보존하여 표시합니다. NaN 항목 수는 Number.isNaN으로 직접 센 별도 결과이며, 두 검색의 반환값과 대조할 수 있습니다.
NaN을 찾았다고 오류의 원인이나 원래 입력까지 알 수는 없습니다. 활동은 이미 만들어 둔 가상 배열의 검색만 실행합니다. 실제 계산 자료를 검토할 때는 어느 단계에서 NaN이 생겼는지 따로 추적해야 합니다. AI에게 검색 결과를 설명시킬 때 ‘무엇으로 같은 값을 판정했는가’를 함께 물어보세요.

