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

我看了最新的代码也是这样的,


![Image](https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20210319/91854e0b0721c174ed7036a6fed2afd9.png)

| 信息类型       | 内容                             |
|----------------|----------------------------------|
| 产品分类       | 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 逻辑不同

解决方案:

  1. 临时方案:使用严格不等判断,如 if (this.activeIndex !== 0) 来强制更新
  2. 推荐方案:将空值初始化为 null 而非 '',因为 null == 0 返回 false
    data() {
      return {
        activeIndex: null
      };
    }
回到顶部