Maison > Questions et réponses > le corps du texte
J'essaie de mettre à jour mon code vers ES6 car j'utilise Node 4.0 et j'aime vraiment ses fonctionnalités jusqu'à présent. Cependant, je me sens différent avec le nouvel ES6 Map
数据结构有问题,因为当使用 Array
作为键时,它的行为与 {}
. Je l'utilise comme contre-carte.
J'exécute ce code et je veux savoir comment utiliser un tableau comme clé pour Map
.
"use strict"; var a = new Map(); a.set(['x','y'], 1); console.log(a.get(['x','y'])); var b = {}; b[['x','y']] = 1; console.log(b[['x','y']]);
Il affiche ce qui suit, la première ligne devrait être 1
而不是 undefined
:
undefined 1
La carte JS originale stringifie les clés et je ne veux pas faire le même type de hack de stringification avec le nouvel ES6 Map
.
Comment puis-je utiliser de manière fiable des tableaux comme clés dans ES6 Map
?
P粉5292450502023-10-22 13:33:57
Vous devez enregistrer une référence à l'instance non primitive de Array
utilisée comme clé. Veuillez noter la différence dans les deux exemples suivants :
"use strict"; var a = new Map(); a.set(['x','y'], 1); console.log(a.get(['x','y'])); console.log(['x','y'] === ['x','y']); var b = new Map(); var array = ['x','y']; b.set(array, 1); console.log(b.get(array)); console.log(array === array);
P粉9785510812023-10-22 11:23:32
Comprenez comment les clés de la carte ES2015 se comparent (presque) comme ===
运算符一样。两个数组实例,即使它们包含相同的值,也不会以 ===
les unes aux autres.
Essayez ceci :
var a = new Map(), key = ['x', 'y']; a.set(key, 1); console.log(a.get(key));
Étant donné que la classe Map est destinée à être utilisée comme classe de base, vous pourrez peut-être utiliser des fonctions .get()
remplacées pour implémenter des sous-classes.
(Le "presque" dans la première phrase reflète que la comparaison de l'égalité des clés Map est effectuée via Object.is()
, ce qui arrive rarement dans le codage quotidien. Essentiellement la troisième variante du test d'égalité en JavaScript.)