“如何检测”;“不同的对象类型”;用JavaScript?(数组vs Json vs日期等)

“如何检测”;“不同的对象类型”;用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

为了在递归迭代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 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进行了尝试,它给了我
日期
足够好了!