getStorage/setStorage存取后不对称?
发布于 7 年前 作者 yanlai 10218 次浏览 来自 官方Issues

问题点:

最近在使用getStorage/setStorage方法时出现存取后数据不对称。然后进行了调试检查,发现以下情况:

Date类型的数据进行直接存取是正常的,但是要是Date变量放在了Object对象里面作为属性时,存取后类型变了。

api文档是这么说的:

any data

需要存储的内容。只支持原生类型、Date、及能够通过JSON.stringify序列化的对象。


我就纳闷了,Object支持,Date支持,但Date放到Object里面却把Date类型的属性变成了字符串类型。

(直接打印出来是发现不了问题的,但在做日期格式化的时候就会发现他不是Date类型,报错!)


 测试代码:

   var date = new Date();

   console.log("typeof date :" + typeof (date)); //object


   wx.setStorageSync("test_date", date);

   var date2 = wx.getStorageSync("test_date");

   console.log("typeof date2 :" + typeof (date2)); //object


   var obj = {};

   obj.date = date;

   console.log("typeof obj.date :" + typeof (obj.date)); //object


   wx.setStorageSync("test_obj", obj);

   obj = wx.getStorageSync("test_obj");

   console.log("typeof obj.date2 :" + typeof (obj.date)); //string


    //console.log("typeof obj.date2 :" + typeof (new Date(obj.date)));//object

结论:

这也不能算是个bug,但是既然支持Date类型数据,那么作为Object的属性时也应该可以做到Date类型的支持吧,递归每个属性做一样的处理不就行了。(当然,这只是我简单猜测,实现起来难不难不清楚,但希望可以优化下,毕竟这种需求是很常见的。)

临时处理方案:

把拿出来的Date类型属性值obj.date 再初始化一下就可以恢复原来的类型和数值了new Date(obj.date)


回到顶部