“如何检测”;“不同的对象类型”;用JavaScript?(数组vs Json vs日期等)
为了在递归迭代JSON对象时创建条件,我试图找到一种区分不同对象类型的干净方法 考虑这一点:“如何检测”;“不同的对象类型”;用JavaScript?(数组vs Json vs日期等),javascript,Javascript,为了在递归迭代JSON对象时创建条件,我试图找到一种区分不同对象类型的干净方法 考虑这一点: var aJSON = {"foo" : 1, "bar" : 2}; var anArray = [1,2,3,4,5]; var aDate = new Date('2013-03-10T02:00:00Z'); var anISODate = user.timesTheyLoggedIn[0] // comes from MongoDB console.log(typeof
var aJSON = {"foo" : 1, "bar" : 2};
var anArray = [1,2,3,4,5];
var aDate = new Date('2013-03-10T02:00:00Z');
var anISODate = user.timesTheyLoggedIn[0] // comes from MongoDB
console.log(typeof aJSON); // object
console.log(typeof anArray); // object
console.log(typeof aDate); // object
console.log(typeof anISODate); // object
所有类型的对象都是“对象”,没有更多信息
现在,我的用例只需要检测一个ISODate对象,所以我利用ISODate对象的resetTime函数来区分它们,比如:
if (typeof(val) === "object" && val.resetTime === undefined) { //do stuff...
但是必须有一种更干净、更好的方法来检测一个对象是什么类型的,一种val.isArray()
之类的东西
你会怎么做
PS:“不同的对象类型”在引号中,因为在JS中实际上只有一种对象类型,对吗?如果它们是类,比如
Date
,您可以像这样使用instanceof
:
(new Date() instanceof Date)
其计算结果为true
只要不使用iframe,同样的方法也可以应用于阵列:
([] instanceof Array)
但对于非类的类型,您必须找到自己的方法
如果您不必坚持使用纯JavaScript,您可以切换到Typescript,在那里您还可以描述类型。您可以使用
obj.constructor.name
:
var tst=1>0;
var num=3.141592;
var obj={a:1};
var-arr=[1,2];
var dat=新日期();
var xhr=new XMLHttpRequest();
console.log(tst.constructor.name);
console.log(num.constructor.name);
console.log(obj.constructor.name);
console.log(arr.constructor.name);
console.log(dat.constructor.name);
log(xhr.constructor.name)
aJSON
是一个对象,不是JSON格式的字符串,只是用来自MongoDB的ISODate进行了尝试,它给了我日期
足够好了!