js中关于带数字类型参数传参丢失首位数字0问题
程序员文章站
2022-04-14 18:41:52
最近在项目中遇到一个问题,js中传带有数字的参数时,如果参数开头有数字0,会把0给去掉。 例如: 方法abc(0123456,789); 方法abc中获取的参数0123456就会变为123456。 原因推测: 由于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; }