Table des matières
Nouvelle structure de données ES6
Maison interface Web Questions et réponses frontales Quelles sont les nouvelles structures de données es6 ?

Quelles sont les nouvelles structures de données es6 ?

Apr 15, 2022 pm 07:26 PM
es6 数据结构

Les nouvelles structures sont : 1. Symbol, qui représente une valeur unique et est une structure de fonction ; 2. Set, qui fait référence à une structure "set", similaire à un tableau, permettant le stockage de données non ordonnées et non répétables. ; 3. WeakSet, Semblable à Set, les données internes ne peuvent pas avoir de valeurs en double ; 4. Map fait référence à une structure de « dictionnaire » qui peut stocker les relations de mappage.

Quelles sont les nouvelles structures de données es6 ?

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

Nouvelle structure de données ES6

1. Symbol

Symbol est l'un des nouveaux types de données de base dans ES6. Chaque valeur Symbol renvoyée par la fonction Symbol est unique. La valeur symbol sert d'identifiant de l'attribut de l'objet et a son seul objectif. SymbolES6中新增的一个基本数据类型之一,它是一个函数。每一个从Symbol函数返回的Symbol值都是独一无二的,symbol值作为对象属性的标识符,也是唯一的用途的。

const s1 = Symbol()
const s2 = Symbol()
console.log(s1 === s2); // false
Copier après la connexion

symbol作为key

第一种方式,直接在对象的字面量中添加。

// symbol作为key
const obj = {
  [s1]:'abc',
  [s2]:'cc',
}
Copier après la connexion

第二种方式,通过添加数组方式添加。

// 需要用数组方式来获取,不能通过点语法,否则会获取到字符串key
console.log(obj[s1]);
Copier après la connexion

第三种方式,通过对象中的defineProperty方法添加。

const s4=Symbol()
Object.defineProperty(obj,s4,{
  configurable:true,
  enumerable:true,
  writable:true,
  value:'ff'
})
Copier après la connexion

通过symbol获取对应的值

需要用数组方式来获取,不能通过点语法,否则会获取到字符串key。

console.log(obj[s1]);
Copier après la connexion

symbol不能被隐式转换成string类型。

注意:Symbol函数中的参数是symbol描述符,这是在ES10新增的特性

let Sym = Symbol("Sym")
alert(Sym)  // TypeError: Cannot convert a Symbol value to a string
Copier après la connexion

我们不能直接alert一个symbol对象,但是我们可以通过toString的方式或者.description来获取symbol对象的描述符。

let sym = Symbol('a')
console.log(sym.description); // 'a'
Copier après la connexion

遍历symbol

在使用for遍历、object.keys中是获取不到symbol健的,对此object还提供了getOwnPropertySymbols方法,用于获取对象中所有symbol的key。

const sKeys=(Object.getOwnPropertySymbols(obj));
for(const skey of sKeys){
  console.log(obj[skey]);
}
Copier après la connexion

全局symbol对象注册

有时,我们可能需要多个symbol的值是一致的,我们可以通过symbol提供的静态方法for方法传入一样的描述符来使它们的值一致。

Symbol.for

该方法会在使用给定键搜索运行时符号注册表中的现有符号,并在找到时返回它。否则,使用此键在全局符号注册表中创建一个新符号。

const sa=Symbol.for('cc')
const sb=Symbol.for('cc')
console.log(sa===sb); //true
Copier après la connexion

Symbol.keyFor

该方法用于获取全局symbol的描述符。

const key =Symbol.keyFor(sb)
console.log(key); // c
Copier après la connexion

2、Set

Set对象(类似数组)允许你存放任何数据类型,但里面的值不能重复。

const s1 = new Set()
s1.add(10)
s1.add(20)
s1.add(30)
s1.add(40)

console.log(s1) // Set(4) { 10, 20, 30, 40 }

s1.add(20)
console.log(s1) // Set(4) { 10, 20, 30, 40 }
Copier après la connexion

Set常用方法

方法返回值说明
sizeset对象中的数量返回set对象中的数量
addSet对象添加元素
deleteboolean删除元素
hasbooleanSet对象中是否存在这个值
clear清空Set对象中的值

3、WeakSet

WeakSet是类似Set的另外一种数据结构,内部数据也不能有重复值。

  • 它与Set的区别
    • WeakSet只能存放对象类型,不能存放基本数据类型
    • WeakSet对元素是弱引用

基本使用

const weakSet = new WeakSet();
let obj = {
  name: "_island"
};

weakSet.add(obj);
Copier après la connexion

WeakSet常用方法

symbole comme clé
方法返回值说明
addweakset对象添加元素
deleteboolean删除元素
hasbooleanweakset
const obj1 = { name: "_island" };
const obj2 = { name: "QC2125" };
const obj3={
  [obj1]:'a',
  [obj2]:'b',
}

console.log(obj3);
// { '[object Object]': 'b' }
Copier après la connexion
Copier après la connexion
🎜La première façon est de l'ajouter directement dans le littéral de l'objet. 🎜
const obj1 = { name: "_island" };
const obj2 = { name: "QC2125" };
const map = new Map();
map.set(obj1, "a");
map.set(obj2, "b");
console.log(map); // Map(2) { { name: '_island' } => 'a', { name: 'QC2125' } => 'b' }

// or
const map2 = new Map([[obj1,'a'],[obj2,'b']])
Copier après la connexion
Copier après la connexion
🎜La deuxième façon est de l'ajouter en ajoutant un tableau. 🎜
map2.forEach((item) => console.log(item));
Copier après la connexion
Copier après la connexion
🎜La troisième façon consiste à l'ajouter via la méthode defineProperty dans l'objet. 🎜
for ([val, key] of map2) {
  console.log(`${key}---${val}`);
}
Copier après la connexion
Copier après la connexion
🎜🎜Obtenez la valeur correspondante via le symbole🎜🎜🎜Elle doit être obtenue en mode tableau, pas via la syntaxe par points, sinon la clé de chaîne sera obtenue. 🎜
const weakMap = new WeakMap();
weakMap.set(obj, "a");
console.log(weakMap.get(obj)); // a
Copier après la connexion
Copier après la connexion
🎜symbol ne peut pas être implicitement converti en type string. 🎜🎜🎜Remarque : Le paramètre de la fonction Symbole est le descripteur de symbole, qui est une nouvelle fonctionnalité dans ES10🎜🎜rrreee🎜Nous ne pouvons pas directement alerter un objet symbole, mais Nous pouvons obtenir le descripteur de l'objet symbol via toString ou .description. 🎜rrreee🎜🎜Symbole de déplacement🎜🎜🎜Lors de l'utilisation de pour le parcours et de object.keys, la clé symbole ne peut pas être obtenue concernant ce< code. >object fournit également la méthode getOwnPropertySymbols, qui est utilisée pour obtenir les clés de tous les symboles de l'objet. 🎜rrreee🎜🎜Enregistrement global des objets symboles🎜🎜🎜Parfois, nous pouvons avoir besoin que les valeurs de plusieurs symbole soient cohérentes. Nous pouvons transmettre la méthode statique fournie par <code>symbol<. /code> La méthode for passe le même descripteur pour rendre leurs valeurs cohérentes. 🎜🎜🎜Symbol.for🎜🎜🎜Cette méthode recherche dans le registre des symboles d'exécution un symbole existant à l'aide de la clé donnée et le renvoie s'il est trouvé. Sinon, un nouveau symbole est créé dans le registre global des symboles à l'aide de cette clé. 🎜rrreee🎜🎜Symbol.keyFor🎜🎜🎜Cette méthode est utilisée pour obtenir le descripteur du symbole global. 🎜rrreee🎜🎜🎜2, l'objet Set🎜🎜🎜🎜Set (similaire à un tableau) vous permet de stocker n'importe quel type de données, mais les valeurs à l'intérieur ne peuvent pas être répétées. 🎜rrreee🎜🎜Définir les méthodes communes🎜🎜🎜< /thead>
MéthodeValeur de retourDescription
size🎜setLa quantité dans l'objet défini🎜Renvoie la quantité dans l'objet défini🎜 🎜
ajouter🎜Définir un objet 🎜Ajouter un élément 🎜🎜
supprimer 🎜booléen🎜Supprimer l'élément 🎜🎜
a🎜booléen🎜 Cette valeur existe-t-elle dans l'objet Set ? 🎜🎜
clear🎜Aucun🎜Effacer la valeur dans le Set object🎜 🎜🎜🎜🎜🎜🎜3. WeakSet🎜🎜🎜🎜WeakSet est une autre structure de données similaire à Set, et les données internes ne peuvent pas avoir de valeurs en double. . 🎜
  • La différence entre celui-ci et Set
    • WeakSet ne peut stocker que des types d'objets, pas des types de données de base
    • WeakSet est une référence faible à l'élément
🎜🎜Utilisation de base🎜🎜rrreee🎜🎜Méthodes courantes de WeakSet🎜🎜🎜
MéthodeValeur de retourDescription
ajouter🎜weakset objet 🎜Ajouter un élément 🎜🎜
supprimer🎜 booléen</ code>🎜<td>Supprimer l'élément 🎜🎜<tr><td><code>a🎜booléen🎜weakset</code > objet Cette valeur existe-t-elle🎜🎜🎜🎜<p><strong>关于遍历</strong></p><p><code>WeakSet不能被遍历,因为它只是对对象进行弱引用,如果遍历去获取元素,有可能导致对象不能被GC回收。

所以WeakSet中的对象是不能获取的

4、Map

ES6新增的数据结构,用于存储映射关系。我们知道在JavaScript中对象中是不能用对象来作为key的。(假如我们把对象作为key,其内部会将对象转换为字符串[object object]

const obj1 = { name: "_island" };
const obj2 = { name: "QC2125" };
const obj3={
  [obj1]:&#39;a&#39;,
  [obj2]:&#39;b&#39;,
}

console.log(obj3);
// { &#39;[object Object]&#39;: &#39;b&#39; }
Copier après la connexion
Copier après la connexion

Map则可以把对象作为key进行存储,可以通过set方法添加到Map中,也直接通过字面量的方式添加。

const obj1 = { name: "_island" };
const obj2 = { name: "QC2125" };
const map = new Map();
map.set(obj1, "a");
map.set(obj2, "b");
console.log(map); // Map(2) { { name: &#39;_island&#39; } => &#39;a&#39;, { name: &#39;QC2125&#39; } => &#39;b&#39; }

// or
const map2 = new Map([[obj1,&#39;a&#39;],[obj2,&#39;b&#39;]])
Copier après la connexion
Copier après la connexion

Map常用方法

方法返回值说明
get获取对应的元素通过key获取对应元素
sizeMap对象中的数量返回Map对象中的数量
setMap对象添加元素
deleteboolean删除元素
hasbooleanSet对象中是否存在这个值
clear清空Set对象中的值

遍历Map

通过foreach语句遍历Map

map2.forEach((item) => console.log(item));
Copier après la connexion
Copier après la connexion

通过for..of遍历Map

for ([val, key] of map2) {
  console.log(`${key}---${val}`);
}
Copier après la connexion
Copier après la connexion

5、WeakMap

Map类似,也是以键值对的形式存在的

  • 和Map的区别
    • WeakMapkey只能使用对象,不接受其他的类型作为key
    • WeakMapkey对对象是弱引用

基本使用

const weakMap = new WeakMap();
weakMap.set(obj, "a");
console.log(weakMap.get(obj)); // a
Copier après la connexion
Copier après la connexion

WeakMap常用方法

方法 返回值 说明
get weakmap对象 获取元素
delete boolean 删除元素
has boolean weaksmap对象中是否存在这个值

关于遍历

WeakSet一样,正因为它是弱引用,WeakMapkey是不可枚举的,如果key可枚举那其列表将会受GC影响。

【相关推荐:javascript视频教程web前端

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Comparez des structures de données complexes à l'aide de la comparaison de fonctions Java Apr 19, 2024 pm 10:24 PM

Lors de l'utilisation de structures de données complexes en Java, Comparator est utilisé pour fournir un mécanisme de comparaison flexible. Les étapes spécifiques comprennent : la définition d’une classe de comparaison et la réécriture de la méthode de comparaison pour définir la logique de comparaison. Créez une instance de comparaison. Utilisez la méthode Collections.sort, en transmettant les instances de collection et de comparateur.

Structures de données et algorithmes Java : explication détaillée Structures de données et algorithmes Java : explication détaillée May 08, 2024 pm 10:12 PM

Les structures de données et les algorithmes sont à la base du développement Java. Cet article explore en profondeur les structures de données clés (telles que les tableaux, les listes chaînées, les arbres, etc.) et les algorithmes (tels que le tri, la recherche, les algorithmes graphiques, etc.) en Java. Ces structures sont illustrées par des exemples pratiques, notamment l'utilisation de tableaux pour stocker les scores, de listes chaînées pour gérer les listes de courses, de piles pour implémenter la récursion, de files d'attente pour synchroniser les threads, ainsi que d'arbres et de tables de hachage pour une recherche et une authentification rapides. Comprendre ces concepts vous permet d'écrire du code Java efficace et maintenable.

Compréhension approfondie des types de référence en langage Go Compréhension approfondie des types de référence en langage Go Feb 21, 2024 pm 11:36 PM

Les types de référence sont un type de données spécial dans le langage Go. Leurs valeurs ne stockent pas directement les données elles-mêmes, mais l'adresse des données stockées. Dans le langage Go, les types de référence incluent des tranches, des cartes, des canaux et des pointeurs. Une compréhension approfondie des types de référence est cruciale pour comprendre les méthodes de gestion de la mémoire et de transfert de données du langage Go. Cet article combinera des exemples de code spécifiques pour présenter les caractéristiques et l'utilisation des types de référence dans le langage Go. 1. Tranches Les tranches sont l'un des types de référence les plus couramment utilisés dans le langage Go.

Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Structure de données PHP : l'équilibre des arborescences AVL, maintenant une structure de données efficace et ordonnée Jun 03, 2024 am 09:58 AM

L'arbre AVL est un arbre de recherche binaire équilibré qui garantit des opérations de données rapides et efficaces. Pour atteindre l'équilibre, il effectue des opérations de virage à gauche et à droite, en ajustant les sous-arbres qui violent l'équilibre. Les arbres AVL utilisent l'équilibrage de hauteur pour garantir que la hauteur de l'arbre est toujours petite par rapport au nombre de nœuds, réalisant ainsi des opérations de recherche de complexité temporelle logarithmique (O (logn)) et maintenant l'efficacité de la structure de données même sur de grands ensembles de données.

Analyse complète du cadre de collecte Java : disséquer la structure des données et révéler le secret d'un stockage efficace Analyse complète du cadre de collecte Java : disséquer la structure des données et révéler le secret d'un stockage efficace Feb 23, 2024 am 10:49 AM

Présentation de Java Collection Framework L'infrastructure de collection Java est une partie importante du langage de programmation Java. Elle fournit une série de bibliothèques de classes conteneur qui peuvent stocker et gérer des données. Ces bibliothèques de classes de conteneurs ont différentes structures de données pour répondre aux besoins de stockage et de traitement des données dans différents scénarios. L'avantage du framework de collection est qu'il fournit une interface unifiée, permettant aux développeurs d'exploiter différentes bibliothèques de classes de conteneurs de la même manière, réduisant ainsi la difficulté de développement. Structures de données de l'infrastructure de collection Java L'infrastructure de collection Java contient diverses structures de données, chacune ayant ses propres caractéristiques et scénarios applicables. Voici plusieurs structures de données courantes du cadre de collection Java : 1. Liste : Liste est une collection ordonnée qui permet de répéter des éléments. Li

La structure de données basée sur une table de hachage optimise les calculs d'intersection et d'union des tableaux PHP La structure de données basée sur une table de hachage optimise les calculs d'intersection et d'union des tableaux PHP May 02, 2024 pm 12:06 PM

La table de hachage peut être utilisée pour optimiser les calculs d'intersection et d'union de tableaux PHP, réduisant ainsi la complexité temporelle de O(n*m) à O(n+m). Les étapes spécifiques sont les suivantes : Utilisez une table de hachage pour mapper les éléments de. le premier tableau à une valeur booléenne pour déterminer rapidement si l'élément du deuxième tableau existe et améliorer l'efficacité du calcul d'intersection. Utilisez une table de hachage pour marquer les éléments du premier tableau comme existants, puis ajoutez les éléments du deuxième tableau un par un, en ignorant les éléments existants pour améliorer l'efficacité des calculs d'union.

Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Structures de données PHP SPL : injectez de la vitesse et de la flexibilité dans vos projets Feb 19, 2024 pm 11:00 PM

Présentation de la bibliothèque de structures de données PHPSPL La bibliothèque de structures de données PHPSPL (Standard PHP Library) contient un ensemble de classes et d'interfaces pour stocker et manipuler diverses structures de données. Ces structures de données comprennent des tableaux, des listes chaînées, des piles, des files d'attente et des ensembles, chacun fournissant un ensemble spécifique de méthodes et de propriétés pour manipuler les données. Tableaux En PHP, un tableau est une collection ordonnée qui stocke une séquence d'éléments. La classe de tableau SPL fournit des fonctions améliorées pour les tableaux PHP natifs, notamment le tri, le filtrage et le mappage. Voici un exemple d'utilisation de la classe array SPL : useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

Apprenez en profondeur les secrets des structures de données du langage Go Apprenez en profondeur les secrets des structures de données du langage Go Mar 29, 2024 pm 12:42 PM

Une étude approfondie des mystères de la structure des données du langage Go nécessite des exemples de code spécifiques. En tant que langage de programmation concis et efficace, le langage Go montre également son charme unique dans le traitement des structures de données. La structure des données est un concept de base en informatique, qui vise à organiser et gérer les données afin qu'elles puissent être consultées et manipulées plus efficacement. En apprenant en profondeur les mystères de la structure des données du langage Go, nous pouvons mieux comprendre comment les données sont stockées et exploitées, améliorant ainsi l'efficacité de la programmation et la qualité du code. 1. Array Array est l'une des structures de données les plus simples

See all articles