AI 보이는 추론 실험실

객체에 먼저 넣은 이름이 Object.keys에서도 먼저 나올까?

숫자 모양의 키와 일반 문자열 키를 같은 객체에 넣고, 추가·삭제 뒤의 실제 나열 순서를 비교합니다.

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

도서관 제작 공간에서 노트북 옆의 나무 카드를 두 줄로 비교하는 젊은 남성과 카드 쪽으로 날개를 든 작은 공식 올리
학습 장면을 표현한 AI 생성 이미지입니다. 사진 속 배치·화면은 실제 측정·운영 기록이 아닙니다. · 주제 이해를 돕기 위한 AI 생성 이미지 · LTCT 자체 제작
오늘의 질문

name, 10, 2 순서로 속성을 만든 객체에서 Object.keys는 어느 키부터 나열할까요?

name·10·2·note의 대입 순서와 Object.keys의 2·10·name·note 결과를 나란히 놓고 배열 인덱스와 일반 문자열을 구별한 그림
name·10·2·note의 대입 순서와 Object.keys의 2·10·name·note 결과를 나란히 놓고 배열 인덱스와 일반 문자열을 구별한 그림 · 한국논리학협회 자체 제작
그림 크게 보기 ↗
01

만든 순서와 나열된 순서를 따로 기록합니다

가상 자료 카드의 이름을 name, 10, 2 순서로 자바스크립트 객체에 넣었다고 합시다. AI가 ‘객체는 입력 순서를 유지한다’고만 설명하면 Object.keys의 첫 결과를 name으로 예상할 수 있습니다. 실제로 이 활동에서 나오는 순서는 "2", "10", "name"입니다. 값이 사라진 것이 아니라 키를 나열하는 규칙이 작동했습니다.

키는 속성의 이름입니다. 오브젝트 키즈(Object.keys, 객체 키 나열)는 객체 자체가 가진, 나열 가능한 문자열 키를 배열로 돌려줍니다. 활동에서는 새 일반 객체를 만들고 단순 대입만 하므로 모든 선택 키가 이 조건에 해당합니다. 화면에는 대입 기록과 반환 배열을 따로 표시합니다.

02

배열 인덱스인 키가 앞에 옵니다

이 글의 "2"와 "10"은 배열 인덱스로 분류되는 문자열 키입니다. 일반 객체의 키 나열에서는 이런 키가 숫자 오름차순으로 먼저 나옵니다. 그다음에는 나머지 문자열 키가 속성을 만든 순서로 이어집니다. 객체 자체가 배열이어야 이 규칙이 적용되는 것은 아닙니다.

"01"은 숫자 1로 바꿀 수 있어 보여도 "1"과 표기가 다릅니다. 이 활동에서는 배열 인덱스 키로 분류되지 않아 일반 문자열 키 쪽에 남습니다. -1 모양의 키도 같습니다. ‘숫자로 바꿀 수 있는가’와 ‘배열 인덱스 키인가’를 같은 조건으로 다루면 나열 순서를 잘못 예측합니다.

03

값 갱신과 삭제 후 재생성을 비교합니다

기본 대입 순서를 name → 10 → 2 → note로 정하면 결과는 2 → 10 → name → note입니다. name의 값만 갱신해도 그 속성이 처음 만들어진 순서는 바뀌지 않습니다. 반면 name을 삭제한 다음 다시 만들면 일반 문자열 키 중 note 뒤로 가서 2 → 10 → note → name이 됩니다.

같은 조작을 숫자 키 2에 해도 마지막에 나열되지는 않습니다. 다시 생긴 2는 여전히 배열 인덱스이므로 숫자 오름차순 구간의 앞쪽으로 돌아옵니다. 활동에서 작업만 바꾸어 이 차이를 확인하세요. 두 결과를 비교할 때에는 값 갱신인지 삭제·재생성인지도 함께 남겨야 합니다.

04

화면 순서를 사건 발생 기록으로 역산하지 않습니다

AI가 Object.keys의 순서를 보고 자료가 도착한 순서를 복원하면 2가 10보다 먼저 입력됐다고 잘못 말할 수 있습니다. 사건 순서가 필요하면 입력 기록을 별도 배열에 보존해야 합니다. 이 활동도 그 배열과 객체의 키 목록을 구별합니다. 객체의 화면 표시 하나만으로 실제 이력을 확정하지 않습니다.

이 실험은 일반 객체의 자체 문자열 키만 다룹니다. 심벌(Symbol, 별도 종류의 키), 상속된 속성, 나열 불가능한 속성, 프록시처럼 동작을 바꾼 객체는 활동 범위 밖입니다. JSON 원문에서 이름이 쓰인 순서나 다른 언어의 사전 구조 규칙을 이 결과와 자동으로 같다고 보면 안 됩니다. AI 호출 없이 브라우저의 실제 Object.keys를 실행합니다.

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

키 생성 순서와 실제 나열 순서 비교

기본 대입 기록과 Object.keys 결과를 비교하고 앞뒤가 바뀐 키를 찾습니다. 값 갱신과 삭제 후 재생성을 각각 선택해 name의 위치가 달라지는지 봅니다. 01·-1이 들어 있는 입력 묶음으로 바꾸고, 숫자 키 2의 재생성 결과를 확인한 뒤 초기화합니다.

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

처음 대입 기록: name → 10 → 2 → note

추가 조작: 없음

Object.keys 결과: 2 → 10 → name → note

name 값: name 값

일반 객체의 자체·나열 가능한 문자열 키만 비교합니다.

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

두 문제로 생각 확인

1name → 10 → 2 순서로 만든 일반 객체의 Object.keys 결과는?
2기본 객체의 name 값만 새 값으로 바꾸면?

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

나의 설명으로 마무리

오늘 발견한 관계

저장 위치를 확인하고 있습니다…

출처와 제작 안내

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

  1. 일반 객체 자체 키의 나열 순서 ↗Ecma International / TC39ECMAScript 2025 §10.1.11.1

    배열 인덱스의 오름차순, 기타 문자열 키의 생성 순서를 확인. name·note·01 사례는 자체 구현.

  2. Object.keys의 대상 ↗Ecma International / TC39ECMAScript 2025 §20.1.2.19 Object.keys

    자체·나열 가능·문자열 키 배열을 돌려주는 절차 확인. 활동은 단순 일반 객체만 사용.