JavaScript 中 Array 、 Set 、 WeakSet 区别

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
相关推荐
随风一样自由1 小时前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery
西门吹-禅2 小时前
java springboot N+1问题
java·开发语言·spring boot
YHHLAI2 小时前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
skywalk81632 小时前
设计并实现段言的 C FFI 绑定机制 @Trae
c语言·开发语言·python·编程
weixin_BYSJ19872 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
沪飘大军3 小时前
ll-llm:一个零依赖、可插拔的 OpenAI 兼容 LLM 代理
javascript
IT笔记4 小时前
【Rust】Rust Match 模式匹配详解
java·开发语言·rust
2zcode4 小时前
免费开源项目文档:基于MATLAB卷积神经网络的口罩佩戴检测系统
开发语言·matlab·cnn
逝水无殇4 小时前
C# 运算符重载详解
开发语言·后端·c#
TPBoreas4 小时前
配置信息防泄露方案:.env 环境隔离详解(dotenv-java)
java·开发语言