• js中关于带数字类型参数传参丢失首位数字0问题


    最近在项目中遇到一个问题,js中传带有数字的参数时,如果参数开头有数字0,会把0给去掉。

    例如:

    方法abc(0123456,789);

    方法abc中获取的参数0123456就会变为123456。

    原因推测:

    由于js对数据类型没有一个具体的声明,传入的数值有可能被其默认当中数字  而将多余的0给自动去除了。

    当参数含有0的时候,如果没有对它进行处理,自动会去0, 可能js认为其是一个整数

    有时候发现数字不仅抹去开头的0,也会发生改变

    例如:

    onclick="test(036)", 在test事件中打印出的这个参数解析为了30

    如果前缀为0,js会把你的数字当做八进制

    1、方法传参时

    解决方法:

    方案1(推荐):

    将数字参数转化为字符串传入进去,如果需要在方法里再转回来。

    var str = "<a href=javascript:abc('"+ 0123456 +"')>abc</a>"

    方案2:

    在将数字类型的参数传入前进行特殊规则处理,将首位数字0替换,在方法里获取到时再换回来,个人觉得这样比较麻烦,而且显得多此一举。

    2、页面传参时

    解决方法:

    //使用
    var Request = new Object();
        Request = GetRequest();
        参数名1= Request['参数名1'];
        参数名2= Request['参数名2'];
       
    //定义
    function GetRequest() {           //这种方法获取参数,有效避免了参数前面有0时,0被去掉的情况
           var url = location.search; //获取url中"?"符后的字串   
           var theRequest = new Object();   
           if (url.indexOf("?") != -1) {   
              var str = url.substr(1);   
              strs = str.split("&");   
              for(var i = 0; i < strs.length; i ++) {   
                 theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);   
              }   
           }   
           return theRequest;   
    }   
  • 相关阅读:
    MISP版本嵌入式QT编译时出现mips-linux-gcc command not found
    数据传输对象(DTO)介绍及各类型实体比较
    signalR例子
    WebAPI GET和POST请求的几种方式
    github教程
    Asp.net MVC + EF + Spring.Net 项目实践3
    SpringMVC
    SignalR
    SignalR的实时高频通讯
    开发视频教程
  • 原文地址:https://www.cnblogs.com/qiantao/p/11113613.html
Copyright © 2020-2023  润新知