需求说明:前后台交互时,将后台的List集合封装为json传回前端js。而集合中的实体有字段类型为java.util.Date类型。那么后台返回的json对象到前台后
,此值会为Object,如果直接解析到此值alert出来(或者是显示在页面上),会是显示[object Object].我需要遍历json中的所有值,判断后台程序返回的json字符串中有值为Date类型
的话,将该值显示为"2013-09-06"这种形式。
解决:1.遍历json的所有值,判断该值是否是Date类型:简单地 if (value instanceof Date) 或者 if (value instanceof Object) 或者if (value instanceof object)(因为
alert(value.typeof)打出来是object)都不能正确判断。而是if (Object.prototype.toString.call(value) == "[object Object]")能够正确判断出来。因为Date类型属于js中比较
特殊的类型,其他特殊的类型还有"Array","RegExp","Number","String","Object","HTMLDocument"等,都可以这样判断出来。
注:这里的"特殊"是指什么呢?
首先 "Array","RegExp","Date","HTMLDocument"这几个类型的对象的 typeof 结果都是"object"
当然 更主要的是 Array RegExp Date ... 这几个类 是和 window对象绑定的.
所以不能简单的通过 typeof instanceof 和 constructor 来做判断.
因为
obj instanceof Array 成立的前提是 obj 和Array 要属于一个window
obj .constructor == Array 成立的条件也是一样
RegExp Date ... 类似.
2.要将该值转换为字符串显示格式(如"2013-09-06"),单纯地将js中Date类型转为字符串,直接用date.getYear() + (date.getMonth()+1) + date.getDay()即可,
但是,这里的问题是,从json解析出来的Date类型值现在是[object Object],使用value.getYear()等方法都无效。需要先将该值转为js的Date类型,简单地用Date(value)不行,
参考资料:http://fins.iteye.com/blog/315901
,此值会为Object,如果直接解析到此值alert出来(或者是显示在页面上),会是显示[object Object].我需要遍历json中的所有值,判断后台程序返回的json字符串中有值为Date类型
的话,将该值显示为"2013-09-06"这种形式。
解决:1.遍历json的所有值,判断该值是否是Date类型:简单地 if (value instanceof Date) 或者 if (value instanceof Object) 或者if (value instanceof object)(因为
alert(value.typeof)打出来是object)都不能正确判断。而是if (Object.prototype.toString.call(value) == "[object Object]")能够正确判断出来。因为Date类型属于js中比较
特殊的类型,其他特殊的类型还有"Array","RegExp","Number","String","Object","HTMLDocument"等,都可以这样判断出来。
注:这里的"特殊"是指什么呢?
首先 "Array","RegExp","Date","HTMLDocument"这几个类型的对象的 typeof 结果都是"object"
当然 更主要的是 Array RegExp Date ... 这几个类 是和 window对象绑定的.
所以不能简单的通过 typeof instanceof 和 constructor 来做判断.
因为
obj instanceof Array 成立的前提是 obj 和Array 要属于一个window
obj .constructor == Array 成立的条件也是一样
RegExp Date ... 类似.
2.要将该值转换为字符串显示格式(如"2013-09-06"),单纯地将js中Date类型转为字符串,直接用date.getYear() + (date.getMonth()+1) + date.getDay()即可,
但是,这里的问题是,从json解析出来的Date类型值现在是[object Object],使用value.getYear()等方法都无效。需要先将该值转为js的Date类型,简单地用Date(value)不行,
需要new Date(Date(value))这样才能正确地转为Date类型,然后便可以使用getYear()等方法转为字符串。
非常不幸的是:后边发现,new Date(Date(value))这样始终获取的是当前时间。。。。。。没有找到解决办法。。
参考资料:http://fins.iteye.com/blog/315901