JavaScript 中 Array 、 Set 、 WeakSet 区别

张开发
2026/4/15 13:57:47 15 分钟阅读

分享文章

JavaScript 中 Array 、 Set 、 WeakSet 区别
JavaScript 中 Set 和 Array 的核心区别在于唯一性、顺序性和方法设计。Set 是唯一值集合Array 是有序列表。一、Set 与 Array 核心区别二、关键差异示例1. 唯一性处理constarr[1,2,2,3];constsetnewSet([1,2,2,3]);console.log(arr);// [1, 2, 2, 3]console.log([...set]);// [1, 2, 3]2. 存在性检查性能// Set 的 has() 是 { O(1): 常数时间,无论数据有多少操作时间基本固定 }set.has(2);// true速度快// Array.includes() 是{O(n) 线性时间 } 就像一本本翻书,元素越多越慢arr.includes(2);// true数组大时较慢,最坏情况100个元素要检查到第100个还能发现。3. 转换技巧// 数组去重constunique[...newSet(array)];// Set 转数组constarrayFromSetArray.from(set);WeakSet 与 Set 核心区别Set 可以存储任何类型WeakSet只能存储对象。WeakSet是弱引用不影响垃圾回收。1、存储限制// Set 可以存储任何类型constsetnewSet();set.add(1);// ✅ 数字set.add(hello);// ✅ 字符串set.add({});// ✅ 对象set.add(Symbol());// ✅ Symbolset.add(null);// ✅ nullset.add(undefined);// ✅ undefinedset.add([1,2,3]);// ✅ 数组set.add(function(){});// ✅ 函数// WeakSet 只能存储对象constweakSetnewWeakSet();weakSet.add({});// ✅ 对象weakSet.add([]);// ✅ 数组也是对象weakSet.add(newDate());// ✅ Date 对象weakSet.add(function(){});// ✅ 函数也是对象weakSet.add(1);// ❌ TypeError: Invalid value used in weak setweakSet.add(hello);// ❌ TypeError: Invalid value used in weak setweakSet.add(Symbol());// ❌ TypeError: Invalid value used in weak setweakSet.add(null);// ❌ TypeError: Invalid value used in weak set

更多文章