React Native中返回{"_h":0,"_i":0,"_j":null,"_k":null}而非数字的问题
问题原因分析
- 返回值并非原始整数,而是时间处理库的封装对象
你看到的{"_h": 0, "_i": 0, "_j": null, "_k": null}是老版本moment.js这类时间库生成的时间差实例对象,而非你预期的整数。控制台打印时会自动调用对象的toString()/valueOf()方法,展示出原始数值;但直接返回对象时,就会暴露它的内部属性结构。 - 函数返回逻辑存在疏漏
你的函数大概率没有从时间库的差值结果中提取原始数值,而是直接返回了库生成的封装对象。比如用moment计算差值后,直接返回diff()的结果,而非提取其中的数字值。
解决方案
- 提取库对象中的原始数值:如果用moment.js,计算差值后调用
.valueOf()或.asMilliseconds()(按需选择时间单位)获取整数:function calculateTimeDiff(serverTs, clientTs) { const serverMoment = moment(serverTs); const clientMoment = moment(clientTs); // 不要直接返回diff结果对象,提取数值后返回 return clientMoment.diff(serverMoment).valueOf(); // 也可以用强制类型转换:return Number(clientMoment.diff(serverMoment)) } - 自定义时间差类处理:如果你用的是自定义封装类,检查是否有获取原始数值的方法(比如
.toNumber()),或者直接访问对象的数值属性(比如.value)。 - 强制类型转换:确认返回对象可转数字的前提下,用
Number()或parseInt()包裹返回值,强制转为整数类型。
验证方式
修改返回逻辑后,在函数内打印typeof 返回值,确认结果为"number"而非"object",此时再返回就能得到预期的整数。
内容的提问来源于stack exchange,提问作者Marux
相关产品推荐
相关产品推荐

