请教,清空数组的方法
var arr = [1,2]
arr.length = 0
arr = []
这两个方法有什么区别
我用在vue项目中,用arr = []清空数组没效果,用arr.length = 0 可以实现
请教,清空数组的方法
var arr = [1,2]
arr.length = 0
arr = []
这两个方法有什么区别
我用在vue项目中,用arr = []清空数组没效果,用arr.length = 0 可以实现
泻药
总共有三种方法
arr.splice(0,arr.length); 清空数组
arr = [];赋值为0;这个严格来说不算清空数组,是给数组重新赋值;
arr.length = 0.;清空数组,
至于你说的在项目中重赋值不起作用,可能是代码写错了
问题一:
在js中,数组属于引用类型,引用类型会开辟一块内存用来保存数据。例如你的例子:
var arr = [1,2]
内存会开辟一块地址给这个数组[1,2]
,变量arr
实际上是指向数组[1,2]
的地址,而不是像基本类型那样赋值。
同样的,将arr = [3,4]
,实际是让arr
指向另一块内存地址,数组[1,2]
如果没有变量引用它的话,会在稍后垃圾回收掉。
所以将arr = []
也是将指针的指向一个新创建的空数组上,至于arr.length = 0
,我感觉是没有改变指针的指向,而是直接将那块地址中的数组修改了,希望其他的同学解释一下。
问题二:vue
文档中说明了,对于数组的数据劫持,只能监听到一些数组的方法,赋值是不能监听到的,文档在这。数组更新检测
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
你所赋值的arr本质其实是指向[1,2] 赋值[]也是一个数组所以vue的机制检测不到 但是arr.length=0这个是改变所指向的的对象 所以可以检测到
对于这个问题 vue给出了一个$set的方法
随便搜的一个 你凑合看