3
votes

Comment tester qu'une variable est de type Map ou Array?

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


1 commentaires

Un tableau n'est jamais une Map , ce sont des constructions entièrement différentes.


6 Réponses :


3
votes

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);


0 commentaires

3
votes

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);


0 commentaires

2
votes

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


0 commentaires

3
votes

Vous n'avez pas besoin de tester si un Array 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é .


0 commentaires

2
votes

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


2 commentaires

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.



3
votes

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


0 commentaires