Vue.js中数组的两个奇葩操作,list.length=0作清空、利用下标去改值均不起作用?
一、 两个奇葩操作
定义数组为list,要想让list里的内容清空,脑子里的代码是不是 :
list.length=0 ,我们来试一下:
这是原始代码,往list里添加了a、b。
<body>
<div id="app">
{{list}}
</div>
<script>
var vm = new Vue({
el:'#app',
data:{
list:['a','b']
},
methods:{
},
})
</script>
</body>
跑一下
在控制台输入list.length=0,看能不能成功清除:
结果是:不起作用,那么,为什么呢?
这是因为我们的原生js有个缺陷,对于数组.length=0清空这个做法并不能得到响应,因为它用的是Object.defineProperty(),它具有这个特性。
另外还有一个奇葩操作就是,如果想让数组里的a,修改为y,
输入list[0]='y’也是不起作用的,下面我们来验证一下:
二、解决(替换)方法
那么,问题存在,必然要知道解决办法。
1,清空问题
vm.list.length=0不起作用,我们可以绕一个弯,用splice:
vm.list.splice(0,vm.list.length)
操作示范:
成功清空!
2,利用下标改值问题
其实list[0]=‘y’,不是不起作用,它已经修改了数据,只是没有重新渲染出来,
我们只要在修改后重新渲染一遍就可,使用¥forceupdate():
搞定