做者:明非
來源: https://fanmingfei.com/posts/...
喜氣洋洋,被安利使用iOS12,紅紅火火,更新最新版本。javascript
網絡上已經有人遇到 iOS 數組相關的一個Bug,彷佛會釀成整個互聯網風波。
Array state will be cached in iOS 12 Safari, is bug or feature? -- stackoverflowhtml
iOS 12 的 safari 有哪些變化嗎?今天發現了一個 javascript 的問題 - V2EXjava
Hax 也在V2這篇帖子中產生中分析了這個Bug出現的緣由ios
先來使用 iOS 12 體驗一下:
這是原網頁
這是修復後的git
點擊網頁上方的 Click Refresh,能夠看到,網頁刷新後,原網頁中,數組的順序在第二次訪問網頁的時候,變成了倒序,即使是關閉網頁從新進來,也會是倒序的。若是反覆刷新幾回,數組將會反覆倒序。看起來是 Webview 將這個數組緩存了。github
點擊網頁上方的 Click Test,能夠看到調用的是同一個函數,函數中的數組每次都會從新定義,可是這個數組仍是會保持上一次 reverse 後的順序。數組
經過測試,Array的其餘API並無這種問題,包括手動改變數組中的元素順序,都不會出現這種問題,目前只發現了使用 reverse 出現這種問題。緩存
當咱們使用 reverse 去改變數組順序的時候,那麼數組的順序必定對咱們來講特別重要,若是第二次進來仍是最後的順序,這將對咱們的應用產生很是大的影響!網絡
緊急寫了一個文件來應對這個問題,若是有必要,你們可使用,若是有問題歡迎你們PR。
array-reverse-ios12函數
不知蘋果是否能夠經過 HotPatch 來修復這個問題,若是不能那可能只能下次版本升級了。已蘋果的量級,這個版本可能會有影響不少用戶。