在ES6中,我如何测试一个变量是否是Array
或Map
?
instance.constructor.name === 'Map'
是一种冒险的做法,即使它是核心类型,在压缩后使用自己的类进行这样的操作会破坏测试。
最可靠的验证该变量是否是Map
实例的方法是什么?
在ES6中,我如何测试一个变量是否是Array
或Map
?
instance.constructor.name === 'Map'
是一种冒险的做法,即使它是核心类型,在压缩后使用自己的类进行这样的操作会破坏测试。
最可靠的验证该变量是否是Map
实例的方法是什么?
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
您可以使用instanceof
。它将返回对象是否为map的true/false。
var a = new Map;
console.log(a instanceof Map);
要检查数组,请使用isArray方法
var a= new Array;
console.log(Array.isArray(a))
window
之间跳转,instanceof
将无法工作。我个人不建议这样做。虽然我在最新版本的Chrome中测试过它,它可以正常工作。但在2015年并非如此,因此可能因浏览器而异。 - Kevin Ghadyani不要检查构造函数的.name
(字符串)属性,只需检查构造函数本身是否=== Map
:
const m = new Map();
console.log(m.constructor === Map);
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
Array.isArray
进行检查,否则你需要检查实例。 - Nina Scholzclone()
方法,可以传递任何东西给它。我想知道它是一个Map、Set还是一个Array(或者其他无数的东西)。这是一个有效的问题。我确实需要测试它。 - Ryan ShillingtonArray
是否为Map
?” 我相信我的答案是100%正确的:一个Array
始终是一个Array
而不是一个Map
,因此没有必要测试一个Array
是否为Map
。 - Jörg W Mittagtypeof
运算符告诉你一个 值 的类型,而不是一个 变量 的类型。在 ECMAScript 中,变量没有类型,只有值有类型。 - Jörg W Mittaginstanceof
。instance instanceof Map
Array.isArray(instance)
。
var instance = new Map;
console.log(instance instanceof Map); // true
console.log(instance instanceof Array); //false
clone()
方法,可以传递任何东西给它。我想知道它是一个Map、Set还是Array。这是一个有效的问题,你的答案(包括在其他窗口/上下文中的instanceof
部分)完全是错误的。 - Ryan Shillington