等号引发数组被清空的bug

大家看这个新增按钮哈

每次点击都会添加一个新的模拟数据

这个没有问题

但是他现在用了一行折中的代码 (方案)

来实现这效果

就是这行代码

原来啊他是这么写的

但这么写不行

所以群里有小伙伴让他试一下这样写

这样写就可以

给大家看一下

原来这样写会有什么效果哈

刷新,大家看新增,注意看!没了~

每次点新增这个数据就没了

然后呢他也之前在这加过 log

我们在这打印一下看一下

刷新一下

打开啊

这里明明是

但是呢我展开呢他就变成0了

那关于这个问题之前我也分享过

大家如果没刷到呢

可以回去补补课哈

那我们就直接去找在这个 log 之后

哪还修改了这个变量对吧

正常来说这是个点击事件

后边就没有代码了

就很奇怪

那我们先不管他

全文(口误,当前文件)搜一下

大家看这没问题

这也没问题

没问题

这也没问题

created的

这块应该也没有问题

因为他就只是创建完之后执行一遍

对吧我们继续找

大家看这有个 watch

他在监听这个

值的变化

开始看到这

我就隐约觉得这块可能会有问题

我们先来验证一下

把它整个注掉

我们再来试一下

大家看,就可以了

展开里边也有值了

所以我们就可以推断出来

问题就在这里边

我们再来找

这里边就是一个 if 一个return

我们把这个

下面这行赋值给它注掉再来试一下

大家看 还是不行

说明导致这个问题不是这行代码

那就奇怪了难道这 if 有问题吗

我们把这个 if 再去掉

我们再来试一下

哎可以了

说明就是这if

这就很奇怪

难道一个if会有什么影响吗

我把这个return再注掉再试一下

大家看return注掉也不行

还是有问题说明就是这个if导致的

后来我仔细一看发现原来这里啊

他不是一个比较

他是一个负值

大家看 就缺了一个等号

如果一个等号呢

相当于他把 oldVal 清空了对吧

oldVal 清空相当于 val 就清空了

大家别忘了

因为他这个是

添加元素触发的这个 watch

说明他这个val和oldVal

都是同一个数组

那你清空oldVal

相当于val就被清空了对吧

所以呢如果我们不考虑这个监听

存在是否合理的情况下

解决这个问题其实很简单

就是在这加一个等号

就可以了

我们来试一下

大家看,这就解决了

最后更新于