为了在递归迭代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对象,因此我利用具有resetTime函数的ISODate对象来区分它们,如下所示:
if (typeof(val) === "object" && val.resetTime === undefined) { //do stuff...
但必须有更清洁,更好的方法来检测对象是什么类型的对象,val.isArray()
有点......
怎么做?
PS:"不同的对象类型"是在引号中,因为JS中只有一个对象类型,对吗?
答案 0 :(得分:6)
如果他们是班级,例如Date
,您可以像instanceof
这样使用:
(new Date() instanceof Date)
评估为true
。
只要您不使用iframe,就可以将相同的内容应用于数组:
([] instanceof Array)
但是你必须为不属于类的类型找到你自己的方式。
如果您不必坚持使用纯JavaScript,您可以切换到Typescript,您也可以在其中描述类型。
答案 1 :(得分:3)
您可以使用obj.constructor.name
:
var tst = 1 > 0;
var num = 3.141592;
var obj = {a:1};
var arr = [1,2];
var dat = new Date();
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);
console.log(xhr.constructor.name);
我不确定这样做有多好Mongo型。请尝试告诉我们!