這是最終咱們要拿到的結果javascript
結果:{
lx:1,
name:'zhufeng',
teacher:'aaa',
HASH:'box'
}
最終咱們要拿到的結果 對象格式
複製代碼
詳細的解析步驟走向 秒懂 步步解析html
/* * 結果:{ * lx:1, * name:'zhufeng', * teacher:'aaa', * HASH:'box' * } */
let url = 'http://www.zhufengpeixun.cn/index.html?lx=1&name=zhufeng&teacher=aaa#box';
//1.獲取問號或者井號後面的值
let askIndex = url.indexOf('?'); // ? 第一次出現的位置索引 存在 askIndex
let wellIndex = url.indexOf('#'); // # 第一次出現的位置索引 存在 wellIndex
let askText = url.substring(askIndex + 1, wellIndex); // 從?的具體索引 +1 截取到# 的索引位置不包括#號 存在 askText
let wellText = url.substring(wellIndex + 1); // 從#位置索引 +1 截取到最後 存在 wellText
// askText => "lx=1&name=zhufeng&teacher=aaa"
// wellText => "box"
//2.問號後面值的詳細處理
let result = {}; // 空對象
let askAry = askText.split('&'); // 用指定的 & 分隔符 把?號後面獲取到的字符串 拆成數組
// askAry =>["lx=1", "name=zhufeng", "teacher=aaa"]
askAry.forEach(item => { // forEach 遍歷這個 askAry 數組
// item:當前從數組中循環的這一項
// item:"lx=1"
// item:"name=zhufeng"
// item:"teacher=aaa"
let n = item.split('='); // 在把數組中 item 的每一項用 = 拆分紅數組
// n [ '1x','1' ]
// n [ 'name','zhufeng']
// n [ 'teacher','aaa']
let key = n[0];
// key n[0] => 1x
// key n[0] => name
// key n[0] => techer
let value = n[1];
// value n[1] => 1
// value n[1] => zhufeng
// value n[1] => aaa
result[key] = value;
// key : value => 1x : 1
// key : value => name : zhufeng
// key : value => teacher : aaa
});
result['HASH'] = wellText;
// key= HASH : wellText= wellText
console.log(result);
// 控制檯輸出最終結果
{lx: "1", name: "zhufeng", teacher: "aaa", HASH: "box"}
HASH: "box"
lx: "1"
name: "zhufeng"
teacher: "aaa"
複製代碼
如此 LOW 的東西你是否是看到懼怕 那麼 如此繁瑣的東西怎麼能不讓<一等公民> FUNCTION 出來耍java
囉嗦兩句 編程開發最好的開發習慣
代碼潔癖
代碼強迫症
極客精神編程
/** * queryURLParams: 獲取URL地址中間問號傳參的信息和哈希值 * @params * url [string] 要解析的URL字符串 * @return * [object] 包含參數和哈希值信息的對象 * by Take_fly on 201九、 0八、 31 */
// 寫 註釋 和 寫好清晰明瞭的註釋你會很受他人歡迎和 相應的尊重
function queryURLParams(url) {
//1.獲取?和#後面的信息
let askIn = url.indexOf('?'),
wellIn = url.indexOf('#'),
askText = '',
wellText = '';
// #不存在
wellIn === -1 ? wellIn = url.length : null;
// ?存在
askIn >= 0 ? askText = url.substring(askIn + 1, wellIn) : null;
wellText = url.substring(wellIn + 1);
//2.獲取每一部分信息
let result = {};
wellText !== '' ? result['HASH'] = wellText : null;
if (askText !== '') {
let ary = askText.split('&');
ary.forEach(item => {
let itemAry = item.split('=');
result[itemAry[0]] = itemAry[1];
});
}
return result;
}
複製代碼
此時就結束了 , no 方法封裝出不執行那就是一堆破代碼 有用麼 就比如 你買一臺全自動洗衣機回家 , 往牆角一堆 ,那就是是一個大破鐵殼子 他有什麼用途麼沒有 ,函數也是如此數組
各類狀況下 代碼的容錯性
let aa = 'http://www.zhufengpeixun.cn/index.html?lx=1&name=zhufeng&teacher=aaa#box';
let paramsObj = queryURLParams(aa);
console.log(paramsObj);
結果:
{HASH: "box", lx: "1", name: "zhufeng", teacher: "aaa"};
沒有 哈希值 也不會報錯
let aa = 'http://www.zhufengpeixun.cn/index.html?lx=1&name=zhufeng&teacher=aaa';
let paramsObj = queryURLParams(aa);
console.log(paramsObj);
結果:
{lx: "1", name: "zhufeng", teacher: "aaa"};
此時的URL 和 HASH 都沒有
let aa = 'http://www.zhufengpeixun.cn/index.html';
let paramsObj = queryURLParams(aa);
console.log(paramsObj);
最終結果:對象
{ }
複製代碼
此時的你是否是在博主是否是太太太 LOW 了 那麼 逼格 來了o 優秀的 REGEXP 效率那是沒法估量的函數
代碼的容錯性和健壯性會更強大優化
function queryURLParams(url) {
let result = {},
reg1 = /([^?=&#]+)=([^?=&#]+)/g,
reg2 = /#([^?=&#]+)/g;
url.replace(reg1, (n, x, y) => result[x] = y);
url.replace(reg2, (n, x) => result['HASH'] = x);
return result;
}
let aa = 'http://www.zhufengpeixun.cn/index.html?lx=1&name=zhufeng&teacher=aaa#box';
let paramsObj = queryURLParams(aa);
console.log(paramsObj);
複製代碼
~function(){
/* * getParam:獲取URL問號傳參中某一個參數對應的值 * @params * key:要獲取值的屬性名 * @return * 當前傳遞KEY對應的屬性值 * by Take_fly on 201九、 0八、 31 */
function getParam(key){
//1.先獲取URL字符串中全部問號參數信息
//驗證是否存在問號,不存在無需處理
let obj={},
_this=this,
askIn=_this.indexOf('?');
if(askIn===-1) return;
//獲取問號後面的參數信息
let link=document.createElement('a'),
askText=null;
link.href=_this;
askText=link.search.substring(1);
//把參數信息解析成爲鍵值對的方式
askText.split('&').forEach(item=>{
let [key,value] = item.split('=');
obj[key] = value;
});
//2.獲取對應的屬性值並返回
return obj[key];
}
String.prototype.getParam=getParam;
}();
var url="locallhost?key1=val1&key2=val2&key3=val3";
console.log(url.getParam("key3")); //=>'val3'
複製代碼
知道大家都是那麼聰明的高級開發工程師 其中一眼秒懂了吧 在控制檯 輸出consoile .dir(a)ui
不善言辭 願你有所收穫this
**信念
道之所限
願力突破**
複製代碼