uni-app 小程序 diff 0 和 '' 判断应不等
uni-app 小程序 diff 0 和 ‘’ 判断应不等
示例代码:
data() {
return {
activeIndex: ''
};
}
操作步骤:
this.activeIndex = 0;
预期结果:
activeIndex 变为 0
实际结果:
activeIndex 还是 ''
bug描述:
data 函数里面的 1 级属性,值不能在 0 和 ‘’ 之间切换,我看了源码,因为 _diff 方法里面用的是双等 == 判断,这样的话,0 是等于 ‘’ 的,所以判断是相等的,就不会 setData
二级属性就不会有问题。
这个文件
node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js
我看了最新的代码也是这样的,

| 信息类型 | 内容 |
|----------------|----------------------------------|
| 产品分类 | uniapp/小程序/微信 |
| PC开发环境 | Windows |
| PC开发环境版本 | W10专业版 |
| 第三方工具版本 | v2.0.0-31420210305001 |
| 基础库版本 | v2.0.0-31420210305001 |
| 项目创建方式 | CLI |
| CLI版本 | v2.0.0-31420210305001 |
更多关于uni-app 小程序 diff 0 和 '' 判断应不等的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 小程序 diff 0 和 '' 判断应不等的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个已知的 uni-app 小程序平台的数据绑定问题。确实如您所述,问题出现在 _diff
方法使用了 ==
进行相等性比较,导致 0
和 ''
被判定为相等,从而不会触发 setData
更新。
问题分析:
- 在 JavaScript 中,
0 == ''
返回true
(宽松相等) - uni-app 的数据 diff 机制因此认为值未变化,跳过了数据同步
- 二级属性不受影响是因为 diff 逻辑不同
解决方案:
- 临时方案:使用严格不等判断,如
if (this.activeIndex !== 0)
来强制更新 - 推荐方案:将空值初始化为
null
而非''
,因为null == 0
返回false
data() { return { activeIndex: null }; }