JavaScript的Set是存储唯一值的内置集合,用于去重、存在性判断和集合运算;与数组相比,它拒绝重复、无索引、不保证遍历顺序,提供add/has/delete等高效集合操作。

JavaScript 的 Set 是一种内置集合数据结构,专门用来存储**唯一值**——无论原始值还是对象引用,重复添加的值会被自动忽略。它不是数组的替代品,而是解决特定问题的工具:去重、快速存在性判断、集合运算。
核心区别:唯一性 vs 重复性
数组允许完全相同的元素多次出现,而 Set 天然拒绝重复:
-
数组:
[1, 1, 2, 2, 3]是合法且保留全部 5 个元素的; -
Set:
new Set([1, 1, 2, 2, 3])实际只存{1, 2, 3},.size为 3。
结构特性:无序性 vs 有序性
数组按插入顺序严格排列,每个元素有确定索引(arr[0]、arr[1]);Set 没有索引,不保证遍历顺序(尽管现代引擎大多保持插入顺序,但规范不保证,不可依赖):
- 不能用
set[0]访问元素; - 要取值,得转成数组(
Array.from(set)或[...set])或用for...of迭代。
常用操作方式不同
数组靠索引和方法链操作(push、filter、map);Set 提供语义更清晰的集合操作 API:
YXPHP6系统可以看做是一个模版平台,而且它又能独立工作. 而且YXPHP6系统也不需要数据库支持. 你可以开发自己的模板,也可以同步官方的模板后进行自己的二次开发,前提是您对YXPHP6要有一定的了解.YXPHP6不仅可以用作企业建站,甚至是blog,只要是您能想到的,YXPHP6几乎都可以胜任. 因为YXPHP6系统本身与模板之间可以说是独立运行的.也就是说,不管你做什么样的网站或者是应用,
立即学习“Java免费学习笔记(深入)”;
-
add(value)—— 添加,自动去重,返回自身(可链式); -
has(value)—— 判断是否存在,时间复杂度 O(1),比数组includes()或indexOf()快得多; -
delete(value)—— 按值删除(无需找索引),返回布尔值; -
clear()和size属性 —— 清空和计数,比数组length = 0或手动计数更直观。
典型使用场景对比
选数组,当你需要:
- 按位置访问或修改元素(如
arr[2] = 'x'); - 保留重复项(如日志列表、用户点击流);
- 大量使用
map、reduce、sort等高阶函数。
选 Set,当你需要:
- 快速去重(
[...new Set(arr)]是最简去重写法); - 高频检查某值是否已存在(如防重复提交、缓存键管理);
- 做集合运算(并集、交集、差集),配合扩展运算符和
filter很容易实现。










