本篇總結一下碰見的各類坑: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.而後把取出的整數部分按順序排列起來,先取的整數做爲二進制小數的高位有效位,後取的整數做爲低位有效位