老师您好,在6-6章节中,初始化功能有所不理解,请指教一下
来源:19-7 使用缓存实现文章收藏功能

黑猫会咬人
2017-12-14
当在没有缓存,首次进入页面时,我点入第一篇文章,有初始化第一条缓存,并赋值false,但是点入第二个文章的时候,第二条缓存并没有初始化,没有赋值,返回的是undefined,麻烦能解释一下嘛。
3回答
-
当你点击第二个文章的时候,postsCollected 里面只有{0:fase}, 这时候postId = 2; 你代码中调postsCollected[postId] 也就是调postsCollected[2] ,因为里面没有2这个key,所以取不到,肯定是undefined。而且这个初始化是针对postsCollected为空的时候,当里面有{0:fase},其实走的是if语句。
012017-12-21 -
一起玩137
2018-02-01
老师这方法有个小小的bug
首先描述一下老师原本的逻辑:
第一步:获取缓存集
第二步:判断缓存集是否存在
如果postsCollected缓存集存在,那么就获取缓存集中对应的id号,前端状态变量collected就为真,显示图标已收藏
否则,就是缓存集不存在,那么就先创建一个空的缓存集,将当前文章缓存状态先设置为false,存入缓存集。collected默认为false
这里面的问题是:如果缓存集存在,但是对应的id号不存在呢?获取不到对应的id号,那么postCollected就会被认为是undefine,出现错误。
因此,我的修改是,postCollected应该在判断语句前定义好,然后在if条件语句(判断缓存集是否存在)中再嵌套一个if条件语句(判断是否存在对应的id号),如果有更好的办法请及时告知,非常感谢。
步骤更改如下:
第一步:获取缓存集
第二步:获取缓存文章id
第三步:判断缓存集是否存在
如果缓存集存在 继续判断对应的id值是否存在(存在 设置collected调节前端收藏状态; 不存在 设置当前文章的缓存为false)
缓存集不存在 创建一个空的缓存集对象 设置当前文章缓存为false
备注:collected不设置就默认为false
222018-03-07 -
慕虎5376285
2018-02-03
视频里 老师应该没有对onload进行测试,直接去测试收藏按钮了,所以没有发现这个问题,我是加了一层判断有没有对应id的缓存记录,就行了
00
相似问题