收藏
回答

初始化data里的数据时,数据类型被改变的BUG

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug data 工具 6.6.6 1.9.94

// 正文修改,简化了一下代码


在data中设置一项Date类型的值,然后在onLoad中取出这个值,发现数据类型被改变成了String

代码如下:

//index.js
var dt = new Date('2018-01-01')
 
Page({
  data: {
    dt: dt
  },
 
  onLoad: function () {
    console.log('typeof dt == typeof this.data.dt ?')
    console.log(typeof dt == typeof this.data.dt)
    console.log('typeof dt is ', typeof dt)
    console.log('typeof this.data.dt is', typeof this.data.dt)
  },
})


运行结果为typeof dt 和 typeof this.data.dt 不相等。


如图:


最后一次编辑于  2018-04-09
回答关注问题邀请回答
收藏

4 个回答

  • 歌风ola
    歌风ola
    2018-08-01

    我也遇到了同样的问题,不过现在返回的是 {} 空对象了。

    2018-08-01
    赞同
    回复 2
    • TY
      TY
      2018-08-24

      不要直接在data里赋值。放在函数里老老实实用setData

      2018-08-24
      回复
    • 歌风ola
      歌风ola
      2018-08-24回复TY

      js的基本类型还是可以的,转成毫秒数赋初始值了

      2018-08-24
      回复
  • 韬々
    韬々
    2018-04-09

    这个问题的确是挺有意思的,涉及到小程序运行架构。


    首先要了解的是,整个小程序分为渲染(客户端webView组件)和JSCore(开发者代码执行环境)两部分,开发者写的代码都运行在JSCore中。


    当调用Page.setData方法的时候,会调用到客户端注入JSCore的invoke接口,把数据发送到Page对应的webView中。在这里需要做一次JSON.stringify,因此你setData传入的Date对象就变成了string。

    2018-04-09
    赞同
    回复
  • TY
    TY
    2018-04-09

    不清楚是什么神奇的机制,但总归是非常不符合直觉的

    2018-04-09
    赞同
    回复
  • 马农™
    马农™
    2018-04-09

    @韬々  一个有意思的问题,data的处理机制是怎样的?value为Date时会做处理?

    2018-04-09
    赞同
    回复
登录 后发表内容