ios12 array.reverse問題

問題描述

iOS12發(fā)布之后,在測試中發(fā)現(xiàn)一個關(guān)于Array.reverse的問題,代碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>iOS 12 Safari bugs</title>
    <script type="text/javascript">
    window.addEventListener("load", function ()
    {
        let arr = [1, 2, 3, 4, 5];
        alert(arr.join());

        document.querySelector("button").addEventListener("click", function ()
        {
            arr.reverse();
        });
    });
    </script>
</head>
<body>
    <button>Array.reverse()</button>
    <p style="color:red;">test: click button and refresh page, code:</p>
</body>
</html>

問題描述:第一次進入刷新alert:1,2,3,4,第二次刷新就一直為alert4,3,2,1

demo演示

未修復(fù)的demo
已修復(fù)的demo

修復(fù)方法

原理就是判斷是否為iOS12版本,重寫Array.prototype.reverse方法,代碼如下:

(function(){
    var ua = navigator.userAgent;
    if (!ua.match(/(iPhone|iPad|iPod)/)) return;
    var matched = ua.match(/OS ([\d_\.]+) like Mac OS X/);
    if (!matched || !matched[1]) return;
    if (matched[1].indexOf('12') !== 0) return;
    //以上判斷是否為iOS12版本
    
    //以下為修復(fù)代碼
    Array.prototype._reverse = Array.prototype.reverse;
    //重寫reverse方法
    Array.prototype.reverse = function reverse() {
        //重新設(shè)置數(shù)組長度 從而避免reverse方法改變數(shù)據(jù)后被緩存
        if (Array.isArray(this)) this.length = this.length;
        return Array.prototype._reverse.call(this);
    }
    var nonenum = {
        enumerable: false
    };
    //設(shè)置Array原型鏈中的reverse方法不可枚舉
    Object.defineProperties(Array.prototype, {
        _reverse: nonenum,
        reverse: nonenum,
    });
})()

希望大家不要遇到該類生產(chǎn)問題咯!(否則你都不知道哪里出錯了~~)

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 用兩張圖告訴你,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 14,144評論 2 59
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,240評論 3 119
  • 人向?qū)W 當(dāng)勤問 愚不恥 貴在誠 學(xué)無涯 書無盡 弱一時 當(dāng)自信 懂謙遜 明孝悌 論尊卑 唯在禮 近達賢 遠妒言 辨...
    嫌疑人X的反思閱讀 220評論 0 0
  • 曲終人未散 秋千樹下有人撫琴,琴聲入耳婉轉(zhuǎn)悠揚。一曲終了扣弦,那人突然出聲“唐亦瞳你還想睡到什么時候?!被卮鹚?..
    珞鴦閱讀 349評論 0 1

友情鏈接更多精彩內(nèi)容