日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android object数组赋值_VUE2.X为什么只对数组的部分方法实现了数据监测?

發布時間:2024/10/12 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android object数组赋值_VUE2.X为什么只对数组的部分方法实现了数据监测? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Vue2.x 中被大家吐槽的最多的一點就是針對數組只實現了push,pop,shift,unshift,splice,sort,reverse 這七個方法的監聽,通過數組下標改變值的時候,是不能觸發視圖更新的。

所以是不是說Object.defineProperty不能對數組進行數據檢測呢?讓我們來一探究竟!

控制臺分別打出了取值和賦值,可以看出是錯怪Object.defineProperty了,他是可以檢測到數組的數據變化的。那么問題又來了,為什么vue作為一個成熟的庫不去對數組所有的方法做數據檢測呢?

我們首先看一下數據的結構

從數組的數據結構來看,數組也是一個 Key-Value 的鍵值對集合,只是 Key 是數字罷了,自然也可以通過 Object.defineProperty 來實現數組的下標訪問和賦值攔截了。其實 Vue2.x 沒有實現數組的全方位監聽主要有兩方面原因:

  • 數組和普通對象相比,JS 數組太"多變"了。比如:arr.length=0,可以瞬間清空一個數組;arr[100]=1又可以瞬間將一個數組的長度變為 100(其他位置用空元素填充),等等騷操作。對于一個普通對象,我們一般只會改變 Key 對應的 Value 值,而不會連 key 都改變了,而數組就不一樣了 Key 和 Value 都經常增加或減少,因此每次變化后我們都需要重新將整個數組的所有 key 遞歸的使用 Object.defineProperty 加上 setter 和 getter,同時我們還要窮舉每一種數組變化的可能,這樣勢必就會帶來性能開銷問題,有的人會覺得這點性能開銷算個 x 呀,但是性能問題都是由小變大的,如果數組中存的數據量大而且操作頻繁時,這就會是一個大問題。React16.x 在就因為在優化 textNode 的時候,移除了無意義的 span 標簽,性能據說都提升了多少個百分點,所以性能問題不可小看。
  • 數組在應用中經常會被操作,但是通常 push,pop,shift,unshift,splice,sort,reverse 這 7 種操作就能達到目的。因此,出于性能方面的考慮 Vue2.x 做出了一定的取舍。
  • 總結

    以上是生活随笔為你收集整理的android object数组赋值_VUE2.X为什么只对数组的部分方法实现了数据监测?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。