Dans ES6, comment puis-je tester si une variable est un Array ou une Map ?
instance.constructor.name === 'Map' est une habitude risquée, même si c'est le type de base, faire cela avec votre propre classe une fois minifiée interrompra le test.
Quelle est la manière la plus fiable de vérifier que la variable est une instance de Carte
6 Réponses :
Vous pouvez utiliser instanceof . Il renverra true / false si l'objet est une carte ou non
var a= new Array; console.log(Array.isArray(a))
Pour vérifier le tableau, utilisez la méthode isArray
var a = new Map; console.log(a instanceof Map);
Au lieu de vérifier la propriété .name (string) du constructeur, vérifiez simplement si le constructeur lui-même est === Map :
const m = new Map(); console.log(m.constructor === Map);
Un tableau ne peut jamais être une carte en javascript. Vous pouvez cependant être confondu avec Object ou map. Pour vérifier si la variable javascript est Map , vous pouvez utiliser instanceof
var instance = new Map; console.log(instance instanceof Map); // true console.log(instance instanceof Array); //false
Pour tester si la variable est une instance d'un tableau, vous pouvez écrire Array.isArray (instance)
instance instanceof Map
Vous n'avez pas besoin de tester si un Array code > est une Map en JavaScript, puisqu'un Array est un Array , il ne peut jamais être une Map .
En fait, il ne s'agit même pas du même type de collection, un Array est un collection indexée alors qu'une carte est une collection à clé .
Vous pouvez vérifier avec Array.isArray , car Map n'est pas Array .
Pour vérifier l'instance, vous pouvez utiliser le instanceof operator .
var array = [],
map = new Map;
console.log(Array.isArray(array)); // true
console.log(Array.isArray(map)); // false
console.log(array instanceof Map); // false
console.log(map instanceof Map); // true
Mais alors ça peut être l'un ou l'autre, qu'en est-il de vraiment tester si c'est une carte?
si vous n'avez qu'un tableau ou une carte, vous pouvez prendre Array.isArray , sinon vous devez vérifier l'instance.
const getType = obj => Object.prototype.toString.call(obj).slice(8, -1); const isArray = obj => getType(obj) === 'Array'; const isMap = obj => getType(obj) === 'Map'; const arr = []; console.log(isArray(arr)); // true const map = new Map(); console.log(isMap(map)); // true
Un tableau n'est jamais une
Map, ce sont des constructions entièrement différentes.