本篇总结一下遇见的各种坑:
1.ios手机端html页面不支持显示各种获取时间(getFullYear(), getMonth(), getDate(), getHours()...)的值:
条件:a.在html页面, b.前置格式是new Date(time), time是后台传过来的'2012-02-12 10:00:00'这种时间格式,c.在ios手机上
bug:在手机上显示NaN
原因:从后台获取的time是string类型,需要先转化成TimeStamp格式
解决方法:首先time.replace(/-/g,'/')做转化,然后执行之后的动作
教训:以后关于时间格式的处理都不用string作为存储变量,在需要的时候做适当的处理(拼接各种字符串)
2.关于localStorage存储对象
条件及bug:localStorage.setItem('obj', {a: 1, b: 2}) ,使用localStorage.getItem('obj')得到的结果是"[object Object]",而直接无法获取
原因:本地存储的是字符串
解决方法: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.然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位