inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Thật sự! Javascript - Từ cơ bản đến nâng cao

순회 연산자📕

keys(), entrieS() 같은 함수의 반환값이 왜 iterator인지 잘 이해가 안갑니다..!

Đã giải quyết

182

aka559

13 câu hỏi đã được viết

0

안녕하세요 강사님.

수업노트에 올려주신 iterator와 iterable 강의까지 들었는데 잘 이해가 안되는 부분이 있어 질문합니다.

 

iterator와 iterable강의에서 'iterator 는 Collection이나 Aggregate 객체를 순횐하는 방법을 제공하는 것' 이라고 보았습니다. 구현 예제까지 본 후에는 '방법을 제공한다 = 어떤 동작을 제공한다 = 함수를 제공한다' 라고 생각했습니다. (예제에서는 hasNext(), next() 함수를 제공함)

그런데 [추가섹션] 배열의 순회 강의에서 배열의 keys() , values() , entires() , [Symbol.iterator]() 함수를 사용하는 걸 보면 각 함수들이 반환하는 iterator들은 함수를 제공하지 않는 걸로 보여서요.

이 함수들의 반환값이 for문으로 순회 가능한(iterable한) 객체들이고, 그럼 iterable한 객체를 만들어주는 keys()같은 함수들이 곧 'iterator'인게 아닌가 싶은데 왜 함수들의 반환값이 iterator가 되는 것인지 궁금합니다!

 

javascript es6 객체지향 es5

Câu trả lời 1

0

codingmax

팀오님 안녕하세요! 질문 주셔서 감사합니다! 😊

배열의 keys(), values(), entires() 는 모두 array iterator 를 반환합니다. 그래서 MDN 의 공식 문서에 아래와 같이 설명 되어 있습니다. (keys() 만 링크해 놓을게요!)

The keys() method of Array instances returns a new array iterator object that contains the keys for each index in the array.

코드로 직접 확인해 보겠습니다! 배열을 정의하고 values() 반환값을 확인해 보겠습니다.

SCR-20240906-isyz.png

그러면 위 그림처럼 Array Iterator 를 반환하고 Array Iterator 의 프로토타입에 next 와 같은 iterable 프로토콜을 정의하고 있는 것을 알 수 있습니다.

자바스크립트에서 모든 배열은 iterable 객체인데요 그 이유는 바로 [Symbol.iterator]() 를 정의하고 있기 때문입니다.

그래서 자바스크립트 코드를 작성할 때 많이 사용하는 Object 의 keys, values, entries 메서드는 배열을 반환하고 그 배열들이 모두 iterable 프로토콜을 준수하고 있는 배열 객체이기 때문에 for ... of 와 같은 이터러블 순회 루프를 사용할 수 있는 것입니다. 그래서 아래와 같이 확인할 수 있습니다.

SCR-20240906-ivsk.png


답변이 팀오님의 궁금증에 도움이 되길 바랍니다. 😊

 

평일에는 제가 답변을 조금 늦게 드릴 수 있는 점 양해 부탁드리겠습니다 🙇‍♂

프론트엔드 학습 수준 문의

0

19

2

질문있습니다

0

17

1

1번 문제 질문입니다.

0

23

1

음악플레이어 문제 중 코드질문

0

17

1

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

36

2

문제와 풀이4 문제점

0

32

2

최근 코테, 과제 테스트 트렌드

0

51

2

lucide react 아이콘 설치

0

34

2

17강 zustand store 서버에서 생성

1

29

1

문제와 풀이

0

19

1

선생님 강의 블로그에 정리해도되나요?

0

52

1

V8에서 undefined를 관리하는 방법에 대한 질문입니다

0

69

2

코드 샌드박스 소스 입력시 콘솔이 계속 반응하는것 같아요.

0

166

3

배열 생성자로 배열 생성시 empty와 undefined

0

171

2

nvm 설치 오류입니다.

0

430

2

console 이 안보입니다.

0

145

2

then 메서드에서 Promise 를 반환하는 코드에 대한 질문입니다.

0

192

2

for 문에서 var 키워드 변수를 사용할 때와 let 키워드 변수를 사용할 때 차이점

0

141

1

Global 스코프 질문

0

163

2

var 변수의 문제점 설명하실 때 질문 있습니다.

0

510

2

메모리에 변수 생성과 값을 할당할 때

0

408

2

클로저 스코프와 블록 스코프 질문드립니다.

2

688

1

코드샌드박스 화면구성이 달라졌네요.

0

673

4

커리큘럼 관련 질문

0

334

1