Maison  >  Article  >  interface Web  >  A quoi sert l'ensemble es6 ?

A quoi sert l'ensemble es6 ?

青灯夜游
青灯夜游original
2022-10-24 17:55:551891parcourir

Set est une structure de données utilisée pour stocker des données ordonnées. Les éléments de Set sont uniques et ne sont pas autorisés à stocker les mêmes éléments ; Set() peut accepter un objet itérable comme paramètre, mais cet objet itérable aura un contenu identique. supprimé, il peut donc être utilisé pour supprimer les éléments en double et empêcher "Array.from(new Set(arr))" ou "[...new Set(arr)]".

A quoi sert l'ensemble es6 ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, ECMAScript version 6, ordinateur Dell G3.

1. Utilisation de base

Set est une nouvelle structure de données fournie par ES6. Elle est utilisée pour stocker des données ordonnées comme un tableau, mais sans la capacité de. accès aléatoire, c'est-à-dire que vous ne pouvez pas obtenir un élément spécifique via l'indexation comme un tableau. SetES6 提供的一种新的数据结构,它跟数组一样用于存储有序的数据,但是没有随机访问的能力,也就是说,不能像数组一样通过索引来获取具体的某个元素。除此以外,最重要的是,Set 中的元素具有唯一性,不允许存储相同的元素!

Set 是一个构造函数,用于实例化实例:

let set = new Set()
set.add(1)//往set集合中添加元素1

除此以外,Set() 可以接受一个可迭代对象作为参数,以作为实例初始化的数据,但是会将这个可迭代对象中相同的内容去除,然而,这也是数组去重的一个方法。

let set = new Set([1,2,2,1,4,3,5])
console.log(set)//Set(5) {1, 2, 4, 3, 5}

由元素唯一性这个特点,可以利用在数组去重上:

//方法一:
Array.from(new Set(arr)) //arr是待去重的数组

//方法二:
[...new Set(arr)]

太酷了吧,类似的,利用这个特性还能实现字符串相同字符的去重。

[...new Set(str)].join('')

然而,上面都是通过 Set 类型元素的唯一性来实现的,那么 Set 内部是如何判断元素是否唯一的呢?它的内部使用了一个算法 Same-value-zero equality ,大致与全等运算符一致,区别在于这种算法认为 NaN 等于 NaN

二、实例属性和方法

实例属性

Set.prototype 上,定义了一个属性 size 表示元素的个数。

let set = new Set([1,2,2,1,4,3,5])
console.log(set.size)//5

实例方法

Set 实例的方法可以分为两类:操作方法和遍历方法。

1.操作方法

  • Set.prototype.add(value) —— 添加某个值到 Set 的末尾,返回 Set 本身。
  • Set.prototype.delete(value) —— 删除某个值,返回布尔值,表示是否删除成功。
  • Set.prototype.has(value) —— 返回一个布尔值,表示该值是否为 Set 的元素。
  • Set.prototype.clear() —— 清除所有成员,没有返回值。

值得一提的是,add() 方法的返回是 Set 本身,所以你应该能想到链式调用:

let set = new Set()
set.add(1).add(2).add(3)

2.遍历方法

  • Set.prototype.keys() —— 返回键名的遍历器
  • Set.prototype.values() —— 返回键值的遍历器
  • Set.prototype.entries() —— 返回键值对的遍历器
  • Set.prototype.forEach() —— 使用回调函数遍历元素

由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys 方法和 values 方法的行为完全一致。

三、WeakSet

WeakSetSet 的升级版,主要有两个区别:

  • WeakSet 只能存储引用类型,不能储存基本类型数据。
  • WeakSet 中的引用类型都是弱引用。

首先,第一点很好理解,就是不能存储基本类型的数据:

const ws = new WeakSet()
ws.add(1)//报错,Invalid value used in weak set

然后第二点,WeakSet 中的对象都是弱引用。也就意味着垃圾回收机制不会考虑 WeakSet 对该对象的引用,一旦在外部引用计数为0,那么就等着被垃圾回收机制处理。所以,WeakSet 适合临时存放一组对象。

由于这个特征,WeakSet 中的成员是不适合引用的,因为它很可能会随时被清理,然而,ES6 规定它是不可遍历的。

WeakSet 中的方法也跟上面提到的 Set 基本一致,但是它没有 sizeDe plus, le plus important est que les éléments de Set sont uniques et que les mêmes éléments ne peuvent pas être stockés !

Set est un constructeur utilisé pour instancier une instance : rrreeeDe plus, Set() peut accepter un objet itérable en tant que paramètre, comme données d'initialisation d'instance, mais le même contenu dans cet objet itérable sera supprimé. Cependant, il s'agit également d'une méthode de déduplication de tableau. rrreee

Le caractère unique des éléments peut être utilisé pour dédupliquer des tableaux : 🎜rrreee🎜C'est cool de même, cette fonctionnalité peut également être utilisée pour dédupliquer les mêmes caractères dans une chaîne. 🎜rrreee🎜Cependant, tout ce qui précède est obtenu grâce au caractère unique des éléments de type Set, alors comment Set détermine-t-il en interne si un élément est unique ? Il utilise un algorithme Égalité de même valeur-zéro en interne, qui est à peu près le même que l'opérateur de congruence. La différence est que cet algorithme considère NaN comme égal à NaN code>. 🎜🎜🎜2. Attributs et méthodes d'instance🎜🎜<h3>🎜Attributs d'instance🎜</h3>🎜Sur <code>Set.prototype, un attribut size est défini pour représenter le numéro d'élément. 🎜rrreee

🎜Méthodes d'instance🎜

🎜Set Les méthodes d'instance peuvent être divisées en deux catégories : les méthodes d'opération et les méthodes de traversée. 🎜

🎜1. Méthode d'opération🎜

  • Set.prototype.add(value) - Ajoutez une valeur à Set fin de Set lui-même.
  • Set.prototype.delete(value) - Supprime une valeur et renvoie une valeur booléenne pour indiquer si la suppression a réussi.
  • Set.prototype.has(value) - Renvoie une valeur booléenne indiquant si la valeur est un élément de Set.
  • Set.prototype.clear() - Efface tous les membres, aucune valeur de retour.
🎜Il est à noter que le retour de la méthode add() est Set lui-même, vous devriez donc pouvoir penser à des appels en chaîne : 🎜rrreee

🎜2. Méthode de traversée🎜

  • Set.prototype.keys() - Renvoie un traverseur de noms de clés
  • Set.prototype.values() - Renvoie un traverseur de paires clé-valeur
  • Set.prototype.entries() - Renvoie un traverseur de clé -Paires de valeurs
  • Set.prototype.forEach() —— Utiliser la fonction de rappel pour parcourir les éléments
🎜Depuis le Set La structure n'a pas de nom de clé, seule la valeur de la clé (ou le nom de la clé et la valeur de la clé sont la même valeur), donc la méthode keys se comporte exactement de la même manière que les values méthode. 🎜🎜🎜3. WeakSet🎜🎜🎜WeakSet est une version améliorée de Set. Il y a deux différences principales : 🎜
    WeakSet ne peut stocker que des types de référence, pas des données de type de base.
  • Les types de référence dans WeakSet sont tous des références faibles.
🎜Tout d'abord, le premier point est facile à comprendre, c'est-à-dire que les types de données de base ne peuvent pas être stockés : 🎜rrreee🎜Ensuite, le deuxième point, les objets dans WeakSet sont toutes des références faibles. Cela signifie que le mécanisme de garbage collection ne prendra pas en compte la référence de WeakSet à l'objet. Une fois que le nombre de références externes atteint 0, il attendra d'être traité par le mécanisme de garbage collection. Par conséquent, WeakSet convient pour stocker temporairement un groupe d'objets. 🎜🎜En raison de cette fonctionnalité, les membres de WeakSet ne conviennent pas comme référence car ils sont susceptibles d'être nettoyés à tout moment. Cependant, ES6 stipule qu'il n'est pas traversable. . 🎜🎜Les méthodes de WeakSet sont fondamentalement les mêmes que celles du Set mentionné ci-dessus, mais elles n'ont pas l'attribut size ni la méthode traverseur. 🎜🎜【Recommandations associées : 🎜Tutoriel vidéo javascript🎜, 🎜Vidéo de programmation🎜】🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn