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
相关推荐
发发就是发2 小时前
顺序锁(Seqlock)与RCU机制:当读写锁遇上性能瓶颈
java·linux·服务器·开发语言·jvm·驱动开发
农村小镇哥2 小时前
PHP递归遍历+MYSQL介绍+MYSQL基本操作
开发语言·mysql·php
llm大模型算法工程师weng2 小时前
Python爬虫实现指南:从入门到实战
开发语言·爬虫·python
J_liaty2 小时前
Vue2 从入门到精通
前端·javascript·vue.js
lly2024062 小时前
R 绘图 - 函数曲线图
开发语言
张元清2 小时前
在 React 中构建沉浸式 Web 应用:全屏、屏幕常亮与系统通知
前端·javascript·面试
ahhdfjfdf2 小时前
微信H5 页面定位权限处理
前端·javascript
蓝黑20202 小时前
Vue组件通信之emit
前端·javascript·vue