最近在項目中遇到一個問題,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; }