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.