JavaScript Set数据类型

1、Set定义

Set 对象允许你存储任何类型的唯一值,无论是基本类型或者是对象引用

1.1、基本类型

在 JavaScript 中,基本类型(基本数值、基本数据类型)是一种既非对象也无方法或属性的数据。有 7 种原始数据类型:

  • string
  • number
  • bigint
  • boolean
  • undefined
  • symbol
  • null

2、简述

Set 对象是值的集合,你可以按照插入的顺序迭代它的元素。

Set 中的元素只会出现一次,即 Set 中的元素是唯一的。

2.1、值的相等

Set 数据类型不会添加重复的值。

  • +0 和 -0 会被认为是两个不同的值,两个都可以存
  • undefined 和 undefined 是恒等的,只能存一个
  • NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个

3、构造函数

Set 构造函数能让你创建 Set 对象,其可以存储任意类型的唯一值,无论是基本类型或者对象引用。

通过 new Set()new Set(iterable) 创建一个新的 Set 实例。(返回一个新的 Set 对象)

// new Set():创建一个空Set
var set = new Set();

// new Set(iterable):创建一个带初始值的Set
// iterable:迭代对象
var set = new Set([1, 2, 3, 4, 5]);

备注: Set() 只能用 new 构建。试图在没有 new 的情况下调用它,会抛出 TypeError。

4、Set属性

size 属性将会返回 Set 对象中元素的个数。

var set = new Set([1, 2, 3]);
console.log(set.size); // 3

size 的值是一个整数,表示 Set 对象有多少个元素。
size 的 set 访问函数是 undefined,即你不能改变这个属性。

5、Set方法

5.1、add(value)

通过 add(value) 方法向 Set 中添加指定元素。(返回一个新的 Set)

// add(value):向 Set 中添加指定元素
// value:指定元素
var set = new Set();
// 当 set 中没有指定元素时,添加指定元素
console.log(set.add(1)); // Set{ 0 => 1}
// 当 set 中存在指定元素时,不改变 set
console.log(set.add(1)); // Set{ 0 => 1}

5.2、has(value)

通过 has(value) 判断指定元素是否存在于 Set 对象中。(返回布尔值)

// has(value):判断指定元素是否存在于 Set 对象中
// value:指定元素
var set = new Set([1]);
console.log(set.has(1)); // 若存在指定元素则返回 true
console.log(set.has(2)); // 若不存在指定元素则返回 false

5.3、delete(value)

通过 delete(value) 移除 Set 对象中的指定元素。(返回布尔值)

// delete(value):移除 Set 对象中的指定元素
// value:指定元素
var set = new Set([1]);
console.log(set.delete(1)); // 若 Set 对象中存在指定元素则返回 true
console.log(set.delete(1)); // 若 Set 对象中不存在指定元素则返回 false

若要移除的元素是引用数据类型(数组、对象等),则需要移除对应的地址,而不是值。

var set = new Set();
var obj = {
	a: 1
}
set.add(obj);
console.log(set.delete({a: 1})); // 返回 false,表示移除失败,Set 对象中不存在该元素
console.log(set.delete(obj)); // 返回 true,表示移除成功,Set 对象中存在该元素

5.4、clear()

通过 clear() 移除 Set 对象中所有元素。(返回 undefined)

var set = new Set([1]);
console.log(set); // Set{ 0 => 1 }
console.log(set.clear()); // undefined
console.log(set); // Set{}

5.5、keys()

通过 keys() 获取 Set 对象的所有元素。(返回 SetIterator)

keys()values() 的别名,和 values() 用法一致,详细看下面的 values()

5.6、values()

通过 values() 获取 Set 对象的所有元素。(返回 SetIterator)

var set = new Set([1, 2, 3]);
console.log(set.keys()); // SetIterator{0 => 1, 1 => 2, 2 => 3}
console.log(set.values()); // SetIterator{0 => 1, 1 => 2, 2 => 3}

5.7、entries()

通过 entries() 获取 Set 对象的所有元素,迭代器的每个元素为 [value, value] 的形式。(返回 SetIterator)

var set = new Set([1, 2, 3]);
console.log(set.entries()); // SetIterator{ 0 => [1, 1], 1 => [2, 2], 2 => [3, 3]}

6、迭代

6.1、for…of

var set = new Set([1, 2, 3]);
for (const item of set) {
	console.log(item);
}
// 1
// 2
// 3

6.2、forEach(callback)

var set = new Set([1, 2, 3]);
set.forEach((item, index) => console.log(index + ' : ' + item));
// 1 : 1
// 2 : 2
// 3 : 3

注意:Set 对象并不是索引从1开始,而是 index 和 item 相等

如果对 forEach 有疑惑可以点击这里进行查看

6.3、迭代器

var set = new Set([1, 2]);
// 获取迭代器
const iterator = set.values();
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2
  • 感谢你这么帅还关注了我!!!(记得一键三连)

你可能感兴趣的:(JS,javascript,前端,开发语言,ecmascript)