TypeError: Cannot create property '1' on string ''

来源:8-12 同步文章缓存状态

atmonsters

2020-09-27

代码是跟着老师敲的,大概知道错误在postsCollected上,但想不通怎么改,老版也有类似提问,但新版的代码有些不同,本人菜鸟,麻烦大佬指点下
图片描述

// pages/post-detail/post-detail.js
import {postList} from '../../data/data.js'

Page({

  /**
   * 页面的初始数据
   */
  data: {
    postData:{},
    collected:false,
    _pid:null,
    _postsCollected:{}
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {    
    const postData = postList[options.pid]
    this.data._pid = options.pid
    
    const postsCollected = wx.getStorageSync('posts_collected')  //个人感觉错误在本行

    this.data._postsCollected = postsCollected
    let collected = postsCollected[this.data._pid]
    if(collected === undefined){
      collected = false
    }
    
    this.setData({
      postData,
      collected
    })
  },

  onCollect(event){
    const postsCollected = this.data._postsCollected
   
    postsCollected[this.data._pid] = !this.data.collected
    this.setData({
      collected:!this.data.collected
    })
    wx.setStorageSync('posts_collected', postsCollected)
  },
写回答

5回答

7七月

2020-09-28

  1. 首先找到这个错误发生的代码行数

  2. 在这个代码行数之前的每一步console.log打印变量 逐步分析,就能找到哪里写错了

0
3
7七月
回复
atmonsters
这门课程看完后应该看 纯正商业应用 全栈课的小程序基础是以纯正作为标准的。
2020-10-12
共3条回复

慕莱坞1351805

2020-10-28

删除缓存数据后会报这个错误,原因:

1,const postsCollected = wx.getStorageSync('posts_collected') 这行代码查询缓存数据结果为空字符串

2,this.data._postsCollected = postsCollected 这行代码会把 this.data._postsCollected 赋值为空字符串

3,所以在onCollect函数中我们获取的_postsCollected变量是空字符串: Cannot create property '1' on string ''

const postsCollected = this.data._postsCollected
postsCollected[this.data._pid] = !this.data.collected


解决方法:

修改 const postsCollected = this.data._postsCollected 为 const postsCollected = this.data._postsCollected || {}

6
1
慕用7292465
太感谢啦~ 自己找原因怎么找都找不到!
2021-03-01
共1条回复

_简简丶单单_蓝颜

2020-10-13

要转换类型

1
0

3301942

2020-10-12

加了一个判断

onCollect: function(event) {

   if (this.data._articleCollected){

     var articleCollected = this.data._articleCollected

   }else{

     var articleCollected = {}

   }

}


1
0

慕田峪8097929

2020-09-29

没有缓存的时候获取到的是空字符串不是undefined

1
1
7七月
这个不影响,空字符一样被视作是否。你可以if一个空字符看看
2020-09-29
共1条回复

微信小程序入门与实战(全新版) 超20000人学习的好课

4年同步微信官方迭代,累计20000+人学习, 比微信官方更火爆!

23961 学习 · 6930 问题

查看课程