微信小程序无法保存对象中的对象的属性到本地缓存
发布于 5 年前 作者 mingfeng 13457 次浏览 来自 问答
  • 需求的场景描述(希望解决的问题)

第二张图是最后一行代码所打印出的结果,group是bills数组里的对象的属性,也是一个对象。已经使用api存入缓存了对吧,从控制台打印的结果可以知道group是有属性的,但是,重载app之后,控制台打印的结果中group没有属性了。

如图,我在拿到缓存后就立马打印了,这个时候group就已经没有属性了。

所以我判断是在调用api的时候,导致这个对象里的对象的属性没有存入缓存,具体是什么原因我也不明白,如果有懂的朋友,希望帮我解答下。

  • 希望提供的能力

因为我在控制台尝试过,用JSON.stringfy是完全可行的,但是为什么这里不行?所以这个地方是什么原因,希望能给我解答一下,谢谢。

我也会继续寻找可能的原因。

1 回复

好吧,我刚刚写完问题,就找到原因了。。。

是这样的,因为我需要的属性名是一个变量的原因,我不得不使用defineProperty来给对象定义属性,这样就可以直接把变量的值作为属性而不是变量名被当做属性。但是似乎对对象里的对象属性使用Object.defineProperty的时候,需要强调一下enumerable为true,如果不强调光写value的话,似乎默认会给一个false,因此就导致JSON.stringfy排除了这个属性,那么你存到缓存的时候就根本没存这个属性进去,自然你重载app之后就看不到这个属性了。

为什么会想到这里呢?因为我看控制台忽然发现这个属性是浅色的,我就在想会不会是这个原因,然后又联想到我用defineProperty方法的时候只写了value,其他enumerable,writable这些属性都没有配置,说不定就是这里的原因,结果一试还真是这样!

这个解答留给日后碰到和我一样问题的小伙伴。

回到顶部