收下這波 JS 技巧,從此少加班
各種業務開發都離不開對資料的處理,然而遇到的很多資料都是不好處理的。這個時候就需要尋求搜尋引擎的幫助。這種方法效率是非常低下的,而且根據作者的個性不能保證其對自己的口味。因此這篇文字包含了一份
JS 常用業務函式手冊,例如時間格式的處理、用的是哪個手機瀏覽器,手機號、郵箱的驗證,以此來提高你的開發效率
常用 JS 函式
1.時間格式化
介面展示的時間千變萬化, 所以一個處理時間的函式,它的重要性就不言而喻了。
formatDate 接受倆個引數, oldDate 型別可以是 Date,String,Number。因為現在用時間戳傳遞時間真的是蠻多,也蠻方便的,而JS 是一門弱型別語言,所以我將 String 和 Number 型別的資料統一當做時間戳來處理。 fmt 是格式化的型別:yyyy-MM-dd hh:mm,其中的 yyyy | MM | dd | hh | mm 是分別匹配 年 | 月 | 日 | 時 | 分 的關鍵字。其中的連字元是可以隨意替換的,只展示年月將其他關鍵字去掉即可。舉幾個例子:
- yyyy年MM月dd -> 2019年09月7日
- hh分mm秒 -> 16分53秒
2.以“天”為單位獲取響應的時間戳
通常都會獲取三天前的時間,12 個以內的資料,24 小時以內的資料,因此我弄了一個以天為單位獲取時間戳的函式
export function setDate(num) { return Date.now() + num * 24 * 60 * 60 * 1000}
時間為正可以獲得未來的時間,時間為負可以獲得過去時間。舉個例子
- 12 個小時之前的時間 -> setDate(-.5)
- 24 個小時之前的時間 -> setDate(-1)
- 三天後的時間 -> setDate(3)
3.獲取 URL 中的引數
這個需求在三大框架的時代應用貌似不多了,不過面試中問的還是蠻多的,瞭解一下是好的
簡單實現
看了一下瀏覽器支援情況還是蠻好的,除了萬惡的 ie
複雜實現
舉個例子:
- getUrlParams(‘a’) -> 3
- getUrlParams(‘b’) -> 5
- getUrlParams(‘c’) ->8888
4.手機端判斷瀏覽器型別
目前主要支援 安卓 & 蘋果 & ipad & 微信 & 支付寶 & 是否是手機端。
5. 陣列降維
二維陣列
多維陣列降維
flat 有相容性問題,手機端問題不大。瀏覽器端不相容 edge。填 Infinity 可展開任意深度的陣列
6.深複製
使用變數 a 複製物件 b,改變 a 中的值 b 中的值也會跟著改變,這叫做淺複製。要想讓 a 獨立於 b 就需要深複製
簡易處理
既然是簡易處理就有他的不足,上面主要是用了 JSON 的序列化和反序列化。而 JSON 是不支援函式和 undefined 的因此碰到這些情況會缺失,但是已經能夠滿足大部分情況了
複雜處理
複雜處理就需要採用遞迴的方式了function deepClone(obj)
7. 防抖 & 節流
防抖和節流屬於高階技巧,業務中比較多見的場合也就是搜尋內容改變提示資訊。即使不加也也不一定能看出區別,但是加了新手維護程式碼可能會崇拜你哦。
防抖
節流
8. 獲取陣列極值
感謝歲月無影的評論,再此補充用 es6 的實現方式
9.判斷小數是否相等
感謝 IAmFineThanks 提供的 Number.EPSILON ,Number.EPSILON === Math.pow(2, -52)因此上述方法也可以這麼寫
使用者輸入的是十進位制數字,計算機儲存的是二進位制數。所以計算結果會有偏差,所以我們不應該直接比較非整數,而是取其上限,把誤差計算進去。這樣一個上限稱為 machine epsilon,雙精度的標準 epsilon 值是 2^-53 (Math.pow(2, -53))
總結:
文中的程式碼可能不一定是最優程式碼,要是你有更好的程式碼歡迎評論。
參考資料:
…www.cnblogs.com/wxydigua/p/…blog.csdn.net/u014607184/…
rockjins.js.org/2017/02/15/…
一些讓 JS 更優雅 / 易讀的小技巧
對於工程師來說,程式碼是寫一遍、修改很多遍、閱讀更多遍的重要產出,可讀性至關重要,所以高可讀程式碼的重要性不言而喻。
1.用物件代替 switch / if
這裡只是提供了一種方式,具體的使用場景還是要你自己判斷。我用的比較多的一個場景是狀態對映中文含義,例如支付狀態通常獲取的是 1, 2,3,4 這種值,但是列表要求顯示相應的中文狀態 未支付 | 支付中 | 已退款等等
2. || 和 && 的妙用
上面是 || 的用法,也叫做短路處理。常見於 if 條件中,但是他其實也可以直接用於語句中。當第一個引數為 true 就會取第一個引數的值,當第一個引數不為 true 就會取第二個引數的值。&& 正好與 || 相反。第一個引數 為 true 會取第二個引數的值
總結
這一部分就只想到了倆個,最佳化空間蠻大的。希望多才多藝的網友紛紛評論獻計讓文章無比壯大起來
原文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946034/viewspace-2656956/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 掌握這20個JS技巧,做一個不加班的前端人JS前端
- 請收下這72個炫酷的CSS技巧CSS
- 開發效率創新高,只因收下了這波 CSS 操作CSS
- 如何優雅使用Docker?請收下這15個小技巧。Docker
- 【適合收藏】讓你減少加班的15條高效JS技巧!JS
- 如何優雅使用Docker?請收下這15個快捷有效的小技巧Docker
- 看完這個,Java IO從此不在難Java
- 養髮神器:重複程式碼一鍵生成,從此遠離加班,告別禿頭!
- Python的22個程式設計技巧,請收下!Python程式設計
- 從理論到案例,請收下這篇Nginx監控運維乾貨Nginx運維
- 這一篇TCP總結請收下TCP
- JavaScript this 從此不再疑惑JavaScript
- 從此不怕Synchronized鎖synchronized
- 使用 Sentry 對應用進行監控,少 bug 少加班
- 波蘭人眼中盜版、加班和遊戲妖魔化遊戲
- 這個 1024,再也不用加班了!
- EXCEL若搭配這個外掛,你的人生從此要開掛Excel
- 這波入門級Excel辦公技巧,上班族一定要會!Excel
- 6 個珍藏已久 IDEA 小技巧,這一波全部分享給你!Idea
- 前端面試?這份手擼Promise請你收下前端面試Promise
- 這才是滿分畢業答辯PPT!請收下這些錦囊
- JS 常用技巧JS
- 為什麼美國遊戲業加班如此普遍?這得從勞動法說起……遊戲
- 模型預測不在行?別慌,收下這篇TensorFlow指南模型
- 這份Koa的簡易Router手敲指南請收下
- 用JS搞了一個自動翻譯,從此不再頭疼看英文書了JS
- 如何提升Excel水平?5個Excel常用技巧,學會不加班Excel
- 收下這12篇最新論文,煉丹不愁沒靈感
- 如何理解 logrotate 實用工具?請收下這份保姆級教程logrotate
- Git命令太多記不住?有了這個神器,從此告別輸入命令列Git命令列
- 【分享貼】辛苦加班了一年,為何年終獎比同級同事少?
- 從本質上來分析程式設計師為什麼要加班,原來是這個道理程式設計師
- 這12個最新AI開源專案,你一定要收下AI
- 打怪升級做王者!速度收下這入門Java的全套攻略Java
- 前端從業兩年總結的一些js使用小技巧前端JS
- 【js】中的小技巧JS
- JS常用簡寫技巧JS
- 前端js除錯技巧前端JS除錯