公衆號開發二三事(三)----詳細bug篇

  本篇總結一下碰見的各類坑:html

  1.ios手機端html頁面不支持顯示各類獲取時間(getFullYear(), getMonth(), getDate(), getHours()...)的值:ios

    條件:a.在html頁面, b.前置格式是new Date(time), time是後臺傳過來的'2012-02-12 10:00:00'這種時間格式,c.在ios手機上微信

    bug:在手機上顯示NaN微信支付

    緣由:從後臺獲取的time是string類型,須要先轉化成TimeStamp格式spa

    解決方法:首先time.replace(/-/g,'/')作轉化,而後執行以後的動做code

    教訓:之後關於時間格式的處理都不用string做爲存儲變量,在須要的時候作適當的處理(拼接各類字符串)htm

  2.關於localStorage存儲對象對象

    條件及bug:localStorage.setItem('obj', {a: 1, b: 2}) ,使用localStorage.getItem('obj')獲得的結果是"[object Object]",而直接沒法獲取blog

    緣由:本地存儲的是字符串字符串

    解決方法:localStorage.setItem('obj', JSON.stringify({a: 1, b: 2})),而後用JSON.parse(localStorage.getItem('obj'))就能夠獲得{a: 1, b: 2}

  3.微信支付小問題

    官網有關於這塊的詳細講解,因此再也不累敘,講講本身出現的問題。

    配置支付路徑指的是你進行支付的頁面所在「目錄」,說目錄也不許確,應該是路徑所在「目錄」。好比你有充值及提交訂單頁面須要進行付款的話,那麼最好把這兩個頁面的父路徑寫成同樣的,這樣配置的時候寫一個路徑就行了。仍是看代碼實例:

http://xx.yy.com/project/charge   //支付路徑
http://xx.yy.com/project/order    //提交訂單路徑
則配置‘http://xx.yy.com/project/

http://xx.yy.com/project/charge   //支付路徑
http://xx.yy.com/project/commit/order    //提交訂單路徑
則須要配置‘http://xx.yy.com/project/和http://xx.yy.com/project/commit/

  4.獲取手機屏幕寬度兼容問題

if (window.innerWidth) {
            winWidth = window.innerWidth;
        } else if ((document.body) && (document.body.clientWidth)) {
            winWidth = document.body.clientWidth;
        }
        if (document.documentElement && document.documentElement.clientHeight && document.documentElement.clientWidth) {
            winWidth = document.documentElement.clientWidth;
        }

   5. 0.1+0.2 =  0.30000000000000004?

    js中的數字都是用浮點數表示的,並規定使用IEEE 754 標準的雙精度浮點數表示。
    IEEE 754 規定了兩種基本浮點格式:單精度和雙精度。
    IEEE單精度格式具備24 位有效數字精度(包含符號號),並總共佔用32 位。
    IEEE雙精度格式具備53 位有效數字精度(包含符號號),並總共佔用64 位。

    十進制0.1 => 二進制0.00011001100110011…(循環0011) =>尾數爲1.1001100110011001100…1100(共52位,除了小數點左邊的1),指數爲-4(二進制移碼爲00000000010),符號位爲0 => 計算機存儲爲:0 00000000100 10011001100110011…11001 => 由於尾數最多52位,因此實際存儲的值爲0.00011001100110011001100110011001100110011001100110011001

    而十進制0.2 => 二進制0.0011001100110011…(循環0011) =>尾數爲1.1001100110011001100…1100(共52位,除了小數點左邊的1),指數爲-3(二進制移碼爲00000000011),符號位爲0 => 存儲爲:0 00000000011 10011001100110011…11001 由於尾數最多52位,因此實際存儲的值爲0.00110011001100110011001100110011001100110011001100110011

    那麼二者相加得: 0.00011001100110011001100110011001100110011001100110011001+ 0.00110011001100110011001100110011001100110011001100110011 (確認??) = 0.01001100110011001100110011001100110011001100110011001100 轉換成10進制以後獲得:0.30000000000000004

    補充知識:十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。

      具體作法是:

        a.用2乘十進制小數,能夠獲得積,將積的整數部分取出,再用2乘餘下的小數 部分,又獲得一個積,再將積的整數部分取出,如此進行,直到積中的小數部分爲零,或者達到所要求的精度爲止。b.而後把取出的整數部分按順序排列起來,先取的整數做爲二進制小數的高位有效位,後取的整數做爲低位有效位

    

相關文章
相關標籤/搜索