zoukankan      html  css  js  c++  java
  • 公众号开发二三事(三)----详细bug篇

      本篇总结一下遇见的各种坑:

      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.然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位

        

  • 相关阅读:
    maven工程目录结构&常用命令
    slf4j 与 log4j2 实战讲解与日志分割
    跟着大神学zookeeper分布式锁实现-----来自Ruthless
    redis分布式锁Redisson扩展
    Redis分布式锁---完美实现
    redis异常Redis:java.util.NoSuchElementException: Unable to validate object at
    boot中 Quartz注入spring管理类失败
    转载一篇必须超级好的JVM配置实战
    uoj#422. 【集训队作业2018】小Z的礼物(MIn-Max容斥+插头dp)
    uoj#420. 【集训队作业2018】矩形(组合数学)
  • 原文地址:https://www.cnblogs.com/july-Vivian/p/7461965.html
Copyright © 2011-2022 走看看