Как проверить, что переменная имеет тип Map или Array? - PullRequest
0 голосов
/ 23 февраля 2019

В ES6, как я могу проверить, является ли переменная Array или Map?

instance.constructor.name === 'Map' - рискованная привычка, даже если это основной тип, делать это с вашим собственным классомкогда minified прервет тест.

Какой самый надежный способ проверить, является ли переменная экземпляром Map

Ответы [ 6 ]

0 голосов
/ 23 февраля 2019

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 голосов
/ 23 февраля 2019

Вы можете проверить с помощью Array.isArray, потому что Map не Array.

Для проверки экземпляра,Вы можете взять instanceof оператора .

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
0 голосов
/ 23 февраля 2019

Вам не нужно проверять, является ли Array значением Map в JavaScript, поскольку Array является значением Array, оно никогда не может бытьMap.

На самом деле, они не являются даже одним и тем же видом коллекции, Array является индексированной коллекцией , тогда как Map является коллекция ключей .

0 голосов
/ 23 февраля 2019

Массив может быть картой в javascript.Однако вы можете быть перепутаны с объектом или картой.Чтобы проверить, является ли переменная javascript Map, вы можете использовать instanceof

instance instanceof Map

Чтобы проверить, является ли переменная экземпляром массива, вы можете написать Array.isArray(instance)

var instance = new Map;
console.log(instance instanceof Map); // true
console.log(instance instanceof Array); //false
0 голосов
/ 23 февраля 2019

Вместо проверки свойства .name (string) конструктора, просто проверьте, является ли сам конструктор === Map:

const m = new Map();
console.log(m.constructor === Map);
0 голосов
/ 23 февраля 2019

Вы можете использовать instanceof.Он вернет true / false, если объект является картой или нет

var a = new Map;
console.log(a instanceof Map);

Для проверки массива используйте метод isArray

var a= new Array;
console.log(Array.isArray(a))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...