做一個自己的前端js工具庫

“世界上本沒有路,走的人多了,也就成了路”,走在代碼的路上并沒有坦途,歷經的坎多了,或許才成了道路。

前言

如引言,?開發中會經常遇到許多通用的代碼?,如手機號、郵箱驗證,獲取url參數、操作cookie等,然而封裝這些常用方法的庫并不多見,而且這些方法與自己的項目經驗相關,很有可能自己去擴展一些有用的方法,所以還是有必要去實現。

這里想要做的是?拋磚引玉?,小伙伴們可以參照作者的思路,自己來實現。

待解決的問題

在實現這個工具庫之前,需要做解決以下一些問題

合適的構建工具

代碼質量和開發效率

api簡單易用

綜上,作者選擇了?rollup + webpack + typeScript + jest?來構建及調試代碼,如果對這些工具還不熟悉,可以去對應的官網查看文檔,還可以結合我后面的github地址,下載源碼運行試試。

Rollup

一個 JavaScript 模塊打包器,可以將小塊代碼編譯成大塊復雜的代碼。它能幫助我們快速打包代碼為CommonJS、ES以及UMD等模塊,還能通過靜態分析代碼,剔除一些未使用的代碼。

Webpack

Webpack也是一個模塊打包器,功能更強大,不過在打包、封裝js庫上來說,rollup比webpack更合適。這里其實可以不用webpack,但借助webpack可以快速搭建本地服務器,方便邊寫代碼邊調試,以及搬運html文件。

TypeScript

TypeScript 是一種由微軟開發的自由和開源的編程語言,它是 JavaScript 的一個超集,擴展了 JavaScript 的語法,結合開發工具的靜態檢查及類型推斷能力,能幫助我們編寫出更嚴謹,可靠的代碼。

Jest

Jest是facebook推出的一款測試框架,簡單地配置即可驗證我們寫的方法是否可靠。

幾個常用的方法

獲取url參數

/**

* get 獲取url參數

* @param 參數為空時,獲取當前url所有參數;

* @param 參數為1個時,獲取當前url的指定參數;

* @param 參數為2個且第二個參數不為true時,獲取指定url的指定參數;

* @param 參數為2個且第二個參數為true時,獲取指定url的所有參數;

*/get() :string|Object{letargs =arguments,? len = args.length,? url:string;if(len ==1|| len ==0) {? ? url = location.search;? }else{? ? url = args[0];? }? url = url.substring(url.indexOf('?') +1);letarr = url.split('&'),? obj:string|Object= {};this.each(arr, (v, i) = >{if(v.indexOf('=') !=-1) {letarg = v.split('='),? ? ? key =decodeURIComponent(arg[0]),? ? ? val =decodeURIComponent(arg[1]);? ? ? obj[key] = val;? ? }? })returnlen ==1|| (len ==2&& args[1] !==true) ? obj[len ==1? args[0] : args[1]] ||'': obj;}復制代碼

獲取url參數,在前端開發中是非常頻繁的操作,特別是在前后端分離后,這里用了很簡單的get命名,?能夠獲取當前url或指定url的所有、指定參數?。

使用示例:

注:由于包名為?js-toolkits?,默認簡寫為?tks?,下同

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 , callback:Function) :Array {letlength: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(iinobj) {if(callback.call(obj[i], obj[i], i) ===false) {break;? ? ? }? ? }? }returnobj;}復制代碼

這里直接參考了jquery each方法,不一樣的是根據習慣?調整了value和index的順序?,在常規遍歷數組及對象時,還是非常實用的。

使用示例:

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(typeofstr !='string') {returnfalse;? ? }try{JSON.parse(str);returntrue;? ? }catch(e) {returnfalse;? ? }default:returnfalse;? }}復制代碼

處理字符串檢測也是很常見的操作,表單提交中更是如此,?這里通過switch匹配類型,也易于直接擴展?。

使用示例:

tks.test('phone','18888888888');//truetks.test('email','123456@qq.com');//truetks.test('email','123456');//falsetks.test('json','{"isJson":"true"}');//true復制代碼

以上列舉了幾個常用的方法,設計的思路是?簡單清晰?,具體的實現方式還有很多種,因人而異。

還有其他一些?trim?(字符串去空格)、?param?(對象轉url參數)、?storage?(操作sessionStorage、localStorage、cookie)等方法,這里就不一一展開介紹,源碼請看?js-toolkits

最后

這個庫還不太完善,作者也還在一點點摸索中,有興趣的小伙伴可以參照實現。如有幫助可以star一下,或者給文章點贊,有建議或問題歡迎提出。

文末小福利:贈送免費的編程學習資料,可以看我主頁簡介領取哦

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內容