AI 보이는 추론 실험실

NaN이 배열에 있는데 indexOf는 왜 못 찾을까?

인덱스 오브와 인클루즈의 비교 규칙을 실제 배열에 적용해, ‘못 찾았다’는 결과가 무엇을 보장하는지 확인합니다.

탐구게시 2026-10-20읽기·실험 약 8분확인 문제 2개규칙 기반 실행한국논리학협회 자체 제작제작·검수 LTCT 편집부

전자 학습 작업대에서 측정기와 가상 관찰 카드를 비교하는 여성과 자료를 바라보는 작은 공식 올리
학습 장면을 표현한 AI 생성 이미지입니다. 사진의 표시와 자료는 실제 측정·운영 기록이 아닙니다. · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

[4, NaN, 12]에서 indexOf(NaN)은 −1인데 includes(NaN)은 참인 이유는 무엇일까요?

배열 4·NaN·12에서 NaN 검색 결과가 indexOf는 −1, includes는 참으로 달라지는 비교 규칙
배열 4·NaN·12에서 NaN 검색 결과가 indexOf는 −1, includes는 참으로 달라지는 비교 규칙 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

같은 자료라도 검색의 비교 규칙이 다릅니다

가상 계산 결과 [4, NaN, 12]에 유효한 수가 아닌 값이 하나 들어 있습니다. NaN은 낸(Not a Number, 수가 아님)이라고 읽는 자바스크립트의 특수한 숫자 값입니다. AI가 배열의 indexOf(NaN)이 −1이므로 NaN이 없다고 설명했다면, 배열과 메서드의 비교 규칙을 함께 살펴야 합니다.

인덱스 오브(indexOf, 일치하는 첫 위치 찾기)는 엄격한 같음 비교를 사용합니다. NaN은 이 비교에서 자기 자신과도 같지 않으므로 NaN === NaN은 거짓입니다. 따라서 배열에 NaN이 들어 있어도 indexOf(NaN)은 찾지 못했다는 −1을 반환합니다.

02

포함 여부를 묻는 includes를 실행합니다

인클루즈(includes, 포함 여부 확인)는 세임 밸류 제로(SameValueZero)라는 규칙을 사용합니다. 이 규칙에서는 NaN끼리 일치하므로 [4, NaN, 12].includes(NaN)은 참입니다. 메서드가 틀린 답을 낸 것이 아니라, 서로 다른 비교 규칙에 따라 결과가 달라진 것입니다.

활동에서 NaN이 있는 배열과 없는 배열을 바꾸고 찾을 값도 선택하세요. 숫자 12는 두 검색에서 모두 발견되지만 문자열 "12"는 발견되지 않습니다. includes도 숫자와 문자열을 자동으로 같은 값으로 바꾸지 않습니다. 위치는 0부터 세므로 숫자 12의 위치는 2입니다.

03

반환값의 자료형도 질문에 맞추어 읽습니다

숫자 4를 찾으면 indexOf는 위치 0을 반환하고 includes는 참을 반환합니다. 위치 0을 조건문에서 거짓으로 읽어 ‘없다’고 처리하면 첫 항목을 놓칩니다. 위치를 쓰는 쪽은 −1과 비교하는지, 포함 여부만 필요한 쪽은 불리언을 받는지 확인해야 합니다.

NaN 검색은 두 메서드를 서로 바꾸어도 되는지 점검하는 반례입니다. 숫자 4와 12만 시험하면 두 방식이 언제나 같은 포함 여부를 준다고 생각하기 쉽습니다. 이 활동처럼 특수값과 자료형이 다른 값을 추가하면 설명이 성립하는 범위를 더 정확하게 정할 수 있습니다. 이것은 배열이 가진 모든 종류의 값을 검사했다는 뜻은 아닙니다.

04

수치 오류의 존재와 원인을 따로 확인합니다

화면은 NaN을 글자 그대로 표시합니다. 배열을 JSON으로 바꾸면 다른 표시가 될 수 있으므로, 여기서는 각 값의 자료형을 보존하여 표시합니다. NaN 항목 수는 Number.isNaN으로 직접 센 별도 결과이며, 두 검색의 반환값과 대조할 수 있습니다.

NaN을 찾았다고 오류의 원인이나 원래 입력까지 알 수는 없습니다. 활동은 이미 만들어 둔 가상 배열의 검색만 실행합니다. 실제 계산 자료를 검토할 때는 어느 단계에서 NaN이 생겼는지 따로 추적해야 합니다. AI에게 검색 결과를 설명시킬 때 ‘무엇으로 같은 값을 판정했는가’를 함께 물어보세요.

직접 확인하기 · 규칙 기반 실행

배열과 찾을 값의 자료형 바꾸기

NaN이 있는 기본 배열에서 indexOf와 includes, NaN 항목 수를 비교합니다. 찾을 값을 숫자 12와 문자열 "12"로 바꾸어 자료형의 영향을 확인합니다. NaN 없는 배열로 바꾸고 다시 NaN을 찾은 뒤 초기화합니다.

조건을 바꾸어 직접 확인하기

배열: [4, NaN, 12]

찾을 값: NaN · 자료형: number

indexOf 결과: -1

includes 결과: 참 (true)

Number.isNaN으로 센 NaN 항목: 1개

위치는 0부터 셉니다. −1은 해당 비교 규칙에서 찾지 못했다는 뜻입니다.

관계를 읽고, 다른 상황에 적용하기

두 문제로 생각 확인

1[4, NaN, 12].includes(NaN)의 반환값은?
2[4, NaN, 12].indexOf("12")가 −1인 이유는?

두 문제의 답을 모두 선택하면 해설을 볼 수 있습니다.

나의 설명으로 마무리

오늘 발견한 관계

0 / 4,000자

메모는 현재 기기의 브라우저에만 보관됩니다. 계정이나 다른 기기에는 동기화되지 않습니다.

출처와 제작 안내

원문을 참고해 설명·도표·문항·실험을 새로 작성했습니다. 별도 표시가 없는 사례와 수치는 학습을 위한 가상 예시입니다. 원문 번역이나 실제 모델의 성능 평가 자료가 아닙니다.

  1. 배열 검색의 두 비교 규칙 ↗Ecma International / TC39ECMAScript 2025 §23.1.3.16–17 Array.prototype.includes / indexOf

    includes의 SameValueZero, indexOf의 IsStrictlyEqual 및 NaN 차이를 확인. [4, NaN, 12]는 자체 학습 자료.