日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2024/10/12 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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为什么只对数组的部分方法实现了数据监测?的全部內容,希望文章能夠幫你解決所遇到的問題。

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