最近在項目中遇到一個問題,js中傳帶有數字的參數時,若是參數開頭有數字0,會把0給去掉。javascript
例如:java
方法abc(0123456,789);url
方法abc中獲取的參數0123456就會變爲123456。spa
緣由推測:code
因爲js對數據類型沒有一個具體的聲明,傳入的數值有可能被其默認當中數字 而將多餘的0給自動去除了。blog
當參數含有0的時候,若是沒有對它進行處理,自動會去0, 可能js認爲其是一個整數事件
有時候發現數字不只抹去開頭的0,也會發生改變ip
例如:字符串
onclick="test(036)", 在test事件中打印出的這個參數解析爲了30it
若是前綴爲0,js會把你的數字當作八進制
一、方法傳參時
解決方法:
方案1(推薦):
將數字參數轉化爲字符串傳入進去,若是須要在方法裏再轉回來。
var str = "<a href=javascript:abc('"+ 0123456 +"')>abc</a>"
方案2:
在將數字類型的參數傳入前進行特殊規則處理,將首位數字0替換,在方法裏獲取到時再換回來,我的以爲這樣比較麻煩,並且顯得畫蛇添足。
二、頁面傳參時
解決方法:
//使用 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; }