JavaScript 中 Set 和 Array 的核心区别在于唯一性、顺序性和方法设计。Set 是唯一值集合,Array 是有序列表。
一、Set 与 Array 核心区别

二、关键差异示例
1. 唯一性处理
javascript
const arr = [1, 2, 2, 3];
const set = new Set([1, 2, 2, 3]);
console.log(arr); // [1, 2, 2, 3]
console.log([...set]); // [1, 2, 3]
2. 存在性检查性能
javascript
// Set 的 has() 是 { O(1): 常数时间,无论数据有多少,操作时间基本固定 },
set.has(2); // true,速度快
// Array.includes() 是{O(n) 线性时间 } 就像一本本翻书,元素越多越慢
arr.includes(2); // true,数组大时较慢,最坏情况:100个元素,要检查到第100个,还能发现。
3. 转换技巧
javascript
// 数组去重
const unique = [...new Set(array)];
// Set 转数组
const arrayFromSet = Array.from(set);
WeakSet 与 Set 核心区别
Set 可以存储任何类型,WeakSet只能存储对象。WeakSet是弱引用,不影响垃圾回收。

1、存储限制
javascript
// Set 可以存储任何类型
const set = new Set();
set.add(1); // ✅ 数字
set.add("hello"); // ✅ 字符串
set.add({}); // ✅ 对象
set.add(Symbol()); // ✅ Symbol
set.add(null); // ✅ null
set.add(undefined); // ✅ undefined
set.add([1, 2, 3]); // ✅ 数组
set.add(function(){});// ✅ 函数
// WeakSet 只能存储对象
const weakSet = new WeakSet();
weakSet.add({}); // ✅ 对象
weakSet.add([]); // ✅ 数组(也是对象)
weakSet.add(new Date()); // ✅ Date 对象
weakSet.add(function(){});// ✅ 函数(也是对象)
weakSet.add(1); // ❌ TypeError: Invalid value used in weak set
weakSet.add("hello"); // ❌ TypeError: Invalid value used in weak set
weakSet.add(Symbol()); // ❌ TypeError: Invalid value used in weak set
weakSet.add(null); // ❌ TypeError: Invalid value used in weak set