set.prototype.entries()返回键值对迭代器,每项为[value, value]数组;可用for...of、array.from或展开运算符遍历,设计上为兼容map接口,语义上set无真正键名。

Set.prototype.entries() 返回一个迭代器对象,这个迭代器每次返回的是一个长度为 2 的数组 [value, value] —— 因为 Set 没有“键”,只有值,所以它把每个元素同时当作键和值来模拟 Map 的 entries 行为。
entries() 返回什么?
调用 set.entries() 不会立即执行遍历,而是返回一个可迭代的迭代器对象。该迭代器的每一项都是形如 [element, element] 的数组,例如:
-
new Set([1, 'a']).entries()→ 迭代时依次得到[1, 1]和['a', 'a'] - 这与
Map.prototype.entries()接口一致,便于统一处理,但语义上 Set 并无真正意义上的键
怎么遍历 entries 迭代器?
可以用 for...of、展开运算符或 Array.from() 等方式消费它:
-
for...of 循环:
const s = new Set(['x', 'y']);<br>for (const [key, value] of s.entries()) {<br> console.log(key, value); // 'x' 'x',然后 'y' 'y'<br>} -
转成数组:
Array.from(s.entries())→[['x','x'], ['y','y']] -
解构 + 展开:
[...s.entries()]效果同上
为什么 entries() 的键和值一样?
这是规范设计:Set 是“值的集合”,没有独立的键;为保持与 Map 迭代器(entries / keys / values)行为兼容,让 entries() 返回 [value, value],而 keys() 和 values() 都返回相同内容(即只含 value 的迭代器)。
换句话说:s.entries() ≡ s.keys() ≡ s.values()(三者返回的迭代器内容完全相同,只是类型不同)。
实际用途提醒
直接用 entries() 在 Set 中并不常见,因为通常只需遍历值。但它有用在以下场景:
- 需要统一写法适配 Map 和 Set(比如封装通用迭代工具函数)
- 配合解构写法快速提取“伪键值”(虽然键无意义,但结构一致)
- 某些库或 API 明确要求传入
entries迭代器(如部分序列化或映射逻辑)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











