// 正文修改,简化了一下代码
在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 不相等。
如图:
我也遇到了同样的问题,不过现在返回的是 {} 空对象了。
不要直接在data里赋值。放在函数里老老实实用setData
js的基本类型还是可以的,转成毫秒数赋初始值了
这个问题的确是挺有意思的,涉及到小程序运行架构。
首先要了解的是,整个小程序分为渲染(客户端webView组件)和JSCore(开发者代码执行环境)两部分,开发者写的代码都运行在JSCore中。
当调用Page.setData方法的时候,会调用到客户端注入JSCore的invoke接口,把数据发送到Page对应的webView中。在这里需要做一次JSON.stringify,因此你setData传入的Date对象就变成了string。
不清楚是什么神奇的机制,但总归是非常不符合直觉的
@韬々 一个有意思的问题,data的处理机制是怎样的?value为Date时会做处理?