Maps et Sets
Dans une Map, la boisson est rangée sous le nom de l'invité. Un Set recueille les extras et n'en garde chaque sorte qu'une fois. lida commence par tea, puis la boisson devient mint. mint et lemon entrent dans l'ensemble. La ligne de la page se lit lida / mint / 2.
La page du mode strict est ailleurs
Là-bas, un nom absent a produit ReferenceError. Ici, rien n'est lancé. Sur une clé absente, get renvoie undefined.
La même clé, une autre boisson
orders.set("lida", "tea") pose la première boisson. orders.set("lida", "mint") n'ajoute pas une deuxième ligne : la valeur de cette clé est écrasée. size compte les clés, pas le nombre d'appels à set.
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
console.log(orders.get("lida"));
console.log(orders.size);
La console affiche mint, puis 1. nima n'a jamais été rangé, donc orders.get("nima") vaut undefined. orders.has("lida") vaut true. On lit une map avec get. orders.lida et orders["lida"] relèvent de la syntaxe des objets et ne lisent pas cette map.
L'objet clé reste cet objet
Une map peut prendre un objet pour clé. Elle conserve cet objet, pas une chaîne tirée de ses champs. Un autre objet aux mêmes champs est une autre clé.
const cup = { guest: "lida" };
const other = { guest: "lida" };
const orders = new Map();
orders.set(cup, "tea");
console.log(orders.get(cup));
console.log(orders.get(other));
console.log(orders.size);
La console montre tea, puis undefined, puis 1. Un objet ordinaire transformerait les deux clés en la chaîne "[object Object]", et la seconde écriture remplacerait la première. La map ne fait pas cela.
Le double mint ne compte pas
Deux appels à add("mint") laissent un seul mint. lemon est une deuxième valeur, donc size vaut 2. has répond par oui ou par non. Il ne renvoie pas la valeur.
const extras = new Set();
extras.add("mint");
extras.add("mint");
extras.add("lemon");
console.log(extras.size);
console.log(extras.has("lemon"));
La console montre 2, puis true. new Set(["mint", "mint", "lemon"]) donne le même ensemble : la copie de mint a déjà disparu. Un set ne contient que des valeurs. Il ne range pas une boisson sous un invité.
delete retire une entrée
S'il a retiré quelque chose, delete renvoie true. Si la valeur manque, il renvoie false et l'ensemble reste tel quel.
const extras = new Set(["mint", "lemon"]);
console.log(extras.delete("lemon"));
console.log(extras.size);
console.log(extras.has("lemon"));
La console montre true, puis 1, puis false. mint est encore là. Une map possède aussi delete et has, mais ils passent par la clé : orders.delete("lida") retire cet invité.
Ce que la page écrit
La boisson de lida est remplacée, l'ensemble est bâti à partir de trois mots, puis l'invité, la boisson et size sont écrits.
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
const orders = new Map();
orders.set("lida", "tea");
orders.set("lida", "mint");
const extras = new Set(["mint", "mint", "lemon"]);
const line = document.querySelector("#line");
line.textContent = "lida / " + orders.get("lida") + " / " + extras.size;
</script>
</body>
</html>
On lit lida / mint / 2. Le premier set vers tea n'apparaît plus. Le mint répété n'augmente pas size. ReferenceError était la ligne de la page en mode strict.
Cinq gestes au comptoir
- Mets lida à tea, puis à mint. get("lida") vaut mint et size vaut 1.
- Range tea sous cup. get(other) vaut undefined et size reste à 1.
- Ajoute mint, mint, puis lemon. size vaut 2 et has("lemon") vaut true.
- Retire lemon. size vaut 1 et has("lemon") vaut false.
- Lis la page. La ligne est lida / mint / 2.
Les ratés, et ce qu'il faut garder
Un second set sur la même clé met à jour. Un second add du même extra est ignoré.
- Ne lis pas la map avec orders["lida"]
- Deux objets qui se ressemblent ne font pas une seule clé
- has ne renvoie pas la boisson
- new Set écarte déjà les copies
- Ne lis pas la ligne comme un ReferenceError
À retenir
- set remplace et size ne bouge pas
- les clés objet sont les objets eux-mêmes
- un set garde chaque valeur une fois
- delete retire une entrée
- la ligne de la page est lida / mint / 2
🧠 Testez Vos Connaissances
Testez Vos Connaissances
Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet
📝 Instructions
- Lisez chaque question attentivement
- Sélectionnez la meilleure réponse pour chaque question
- Vous pouvez refaire le quiz autant de fois que vous le souhaitez
- Votre progression sera affichée en haut