JavaScript Set ES6标准新增的数据类型

本文深入讲解了Set数据结构的创建方法及其特性,包括如何通过构造函数初始化Set,自动过滤重复元素的功能,以及如何使用add和delete方法进行元素的添加与删除操作。

创建一个Set,有以下两种方法:

var set1 = new Set();

var set2 = new Set([1,2,3]);

重复元素在Set中自动被过滤掉

var s = new Set([1,2,3,3,'3']);

console.log(s); //{1,2,3,'3'}

注意数字3和字符串'3'是不同的元素。

add(key)可以添加元素到Set中,可以重复添加某元素,但不会添加进去:

s.add(4);
s; // Set {1, 2, 3, 4}
s.add(4);
s; // 仍然是 Set {1, 2, 3, 4}

通过delete(key)方法可以删除元素:

var s = new Set([1, 2, 3]);
s; // Set {1, 2, 3}
s.delete(3);
s; // Set {1, 2}
### ES6新增数据类型 ES6引入了多个新的数据类型,包括基本数据类型和复杂数据类型。以下是详细的介绍: #### 1. **Symbol** `Symbol` 是一种新的原始数据类型,表示独一无二的。每个通过 `Symbol()` 创建的都是唯一的,即使它们具有相同的描述[^1]。 ```javascript let sym1 = Symbol("key"); let sym2 = Symbol("key"); console.log(sym1 === sym2); // false ``` #### 2. **Set** `Set` 是一个内置对象,允许存储任何类型的唯一,无论是原始还是对象引用。`Set` 的元素不能重复,因此可以用于数组或字符串去重[^3]。 ```javascript let set = new Set([1, 2, 3, 4, 5, 5, 5]); console.log(set); // Set(5) { 1, 2, 3, 4, 5 } ``` #### 3. **Map** `Map` 是键对的集合,其中键可以是任何数据类型(不仅仅是字符串)。它类似于对象,但功能更强大[^4]。 ```javascript let map = new Map(); map.set("name", "Alice"); map.set(1, "one"); console.log(map.get("name")); // Alice console.log(map.get(1)); // one ``` #### 4. **WeakSet** `WeakSet` 类似于 `Set`,但它只接受对象作为其成员,并且这些对象是弱引用的,这意味着如果对象没有其他引用,垃圾回收机制会自动回收它们。 ```javascript let weakSet = new WeakSet(); let obj = {}; weakSet.add(obj); console.log(weakSet.has(obj)); // true ``` #### 5. **WeakMap** `WeakMap` 类似于 `Map`,但它的键必须是对象,并且这些对象是弱引用的。与 `WeakSet` 类似,`WeakMap` 的键如果没有其他引用,也会被垃圾回收机制回收。 ```javascript let weakMap = new WeakMap(); let key = {}; weakMap.set(key, "value"); console.log(weakMap.get(key)); // value ``` #### 6. **Generator** 虽然 `Generator` 不是一种数据类型,但它是一个重要的新特性,允许函数返回可迭代对象,并通过 `yield` 关键字生成多个[^2]。 ```javascript function* generator() { yield 1; yield 2; yield 3; } let gen = generator(); console.log(gen.next().value); // 1 console.log(gen.next().value); // 2 console.log(gen.next().value); // 3 ``` ### 总结 ES6 新增数据类型包括 `Symbol`、`Set`、`Map`、`WeakSet` 和 `WeakMap`,以及与可迭代对象相关的 `Generator` 特性。这些新特性增强了 JavaScript 的功能,提供了更强大的数据处理能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值