初始化data里的数据时,数据类型被改变的BUG
发布于 7 年前 作者 huming 11994 次浏览 来自 问答

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

在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 不相等。

如图:

4 回复

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

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

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

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

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

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

回到顶部