JavaScript 中 Array 、 Set 、 WeakSet 区别

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

一、Set 与 Array 核心区别

在这里插入图片描述

二、关键差异示例

1. 唯一性处理

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. 存在性检查性能

// Set 的 has() 是 { O(1): 常数时间,无论数据有多少,操作时间基本固定 },
set.has(2); // true,速度快

//  Array.includes() 是{O(n)  线性时间 } 就像一本本翻书,元素越多越慢
arr.includes(2); // true,数组大时较慢,最坏情况:100个元素,要检查到第100个,还能发现。

3. 转换技巧

// 数组去重
const unique = [...new Set(array)];

// Set 转数组
const arrayFromSet = Array.from(set);

WeakSet 与 Set 核心区别

Set 可以存储任何类型,WeakSet只能存储对象。WeakSet是弱引用,不影响垃圾回收。
在这里插入图片描述

1、存储限制

// 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值