「世界上本沒有路,走的人多了,也就成了路」,走在代碼的路上並無坦途,歷經的坎多了,或許才成了道路。javascript
如引言,開發中會常常遇到許多通用的代碼
,如手機號、郵箱驗證,獲取url參數、操做cookie等,然而封裝這些經常使用方法的庫並很少見,並且這些方法與本身的項目經驗相關,頗有可能本身去擴展一些有用的方法,因此仍是有必要去實現。html
這裏想要作的是拋磚引玉
,小夥伴們能夠參照做者的思路,本身來實現。 前端
在實現這個工具庫以前,須要作解決如下一些問題java
合適的構建工具
,方便咱們打包代碼,而且易於調試;代碼質量和開發效率
,有類型推斷及靜態檢查能力;api簡單易用
,最好是看一眼就能記住;綜上,做者選擇了rollup + webpack + typeScript + jest
來構建及調試代碼,若是對這些工具還不熟悉,能夠去對應的官網查看文檔,還能夠結合我後面的github地址,下載源碼運行試試。jquery
/** * get 獲取url參數 * @param 參數爲空時,獲取當前url全部參數; * @param 參數爲1個時,獲取當前url的指定參數; * @param 參數爲2個且第二個參數不爲true時,獲取指定url的指定參數; * @param 參數爲2個且第二個參數爲true時,獲取指定url的全部參數; */
get() : string | Object {
let args = arguments,
len = args.length,
url: string;
if (len == 1 || len == 0) {
url = location.search;
} else {
url = args[0];
}
url = url.substring(url.indexOf('?') + 1);
let arr = url.split('&'),
obj: string | Object = {};
this.each(arr, (v, i) = >{
if (v.indexOf('=') != -1) {
let arg = v.split('='),
key = decodeURIComponent(arg[0]),
val = decodeURIComponent(arg[1]);
obj[key] = val;
}
})
return len == 1 || (len == 2 && args[1] !== true) ? obj[len == 1 ? args[0] : args[1]] || '': obj;
}
複製代碼
獲取url參數,在前端開發中是很是頻繁的操做,特別是在先後端分離後,這裏用了很簡單的get命名,可以獲取當前url或指定url的全部、指定參數。webpack
使用示例:git
注:因爲包名爲js-toolkits
,默認簡寫爲tks
,下同github
tks.get();//當前url全部參數
tks.get('name');//當前url指定參數
tks.get('www.baidu.com?xx=1','xx');//指定url,指定參數
tks.get('www.baidu.com?xx=1&yy=2&zz=3',true);//指定url,全部參數
複製代碼
/** * each 遍歷數組及對象 * @param obj {Object|Array} 遍歷對象 * @param callback {Function} 回調函數,第一個參數爲val,第二個爲key,這裏與jquery相反 */
each(obj: Array < any > , callback: Function) : Array < any > {
let length: number,
i: number | string = 0;
if (isArrayLike(obj)) {
length = obj.length;
for (; i < length; i++) {
if (callback.call(obj[i], obj[i], i) === false) {
break;
}
}
} else {
for (i in obj) {
if (callback.call(obj[i], obj[i], i) === false) {
break;
}
}
}
return obj;
}
複製代碼
這裏直接參考了jquery each方法,不同的是根據習慣調整了value和index的順序,在常規遍歷數組及對象時,仍是很是實用的。web
使用示例:編程
tks.each({ aa: 1, bb: 2, cc: 3 },(v, i) = >{
console.log(v, i);
})
tks.each([1, 3, 5, 7, 9], (v, i) = >{
console.log(v, i);
})
複製代碼
/** * test 經常使用字符串檢測 * @param type {String} 類型 * @param str {String} 須要檢測的字符串 */
test(type: string, str: string) : Boolean {
switch (type) {
case 'phone':
return /^1[3456789]\d{9}$/.test(str);
case 'email':
return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
case 'json':
if (typeof str != 'string') {
return false;
}
try {
JSON.parse(str);
return true;
} catch(e) {
return false;
}
default:
return false;
}
}
複製代碼
處理字符串檢測也是很常見的操做,表單提交中更是如此,這裏經過switch匹配類型,也易於直接擴展。
使用示例:
tks.test('phone','18888888888');//true
tks.test('email','123456@qq.com');//true
tks.test('email','123456');//false
tks.test('json','{"isJson":"true"}');//true
複製代碼
以上列舉了幾個經常使用的方法,設計的思路是簡單清晰,具體的實現方式還有不少種,因人而異。
還有其餘一些trim
(字符串去空格)、param
(對象轉url參數)、storage
(操做sessionStorage、localStorage、cookie)等方法,這裏就不一一展開介紹,源碼請看 js-toolkits
這個庫還不太完善,做者也還在一點點摸索中,有興趣的小夥伴能夠參照實現。若有幫助能夠star一下,或者給文章點贊,有建議或問題歡迎提出。