JavaScript - 문제 미리보기

문제 662

hard
다음 코드의 결과는?

const mySet = new Set(["x", "y", "z"]);

console.log([...mySet.keys()]);     // A
console.log([...mySet.values()]);   // B
console.log(mySet.keys() === mySet.values()); // C
A. A: `["x", "y", "z"]`, B: `["x", "y", "z"]`, C: `true`
B. A: `[0, 1, 2]`, B: `["x", "y", "z"]`, C: `false`
C. A: `["x", "y", "z"]`, B: `["x", "y", "z"]`, C: `false`
D. A: `undefined`, B: `["x", "y", "z"]`, C: `false`

정답: C

Set에서 keys()values() 메서드는 특별한 특징을 가집니다:

1) A와 B: Set은 키가 없기 때문에 keys()values() 모두 같은 값들을 반환합니다. 둘 다 ["x", "y", "z"]를 출력합니다.

2) C: 하지만 mySet.keys() === mySet.values()false입니다. 이는 두 메서드가 서로 다른 Iterator 객체를 반환하기 때문입니다. JavaScript에서 객체는 참조로 비교되므로, 내용이 같아도 다른 객체이면 === 비교 결과는 false가 됩니다.

중요한 개념들:

1) Set의 keys()values()는 동일한 값을 반환 (Map 호환성을 위함)
2) 매번 새로운 Iterator 객체를 생성하므로 참조가 다름
3) 실제 개발에서는 values()나 직접 for...of 순회를 더 많이 사용

💡 학습 팁

이 문제를 포함한 JavaScript 과목의 모든 문제를 순차적으로 풀어보세요. 진행상황이 자동으로 저장되어 언제든지 이어서 학습할 수 있습니다.