狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

作為前端工程師,你應(yīng)該了解的 10 個 JavaScript 技巧

admin
2024年10月13日 22:57 本文熱度 525

?

英文 | https://blog.stackademic.com/as-a-front-end-engineer-10-javascript-tricks-and-tips-you-should-know-about-96bc46b5c6be

前言

過去我寫了很多垃圾代碼,現(xiàn)在看起來很糟糕。當(dāng)我再次看到那些代碼片段時,我什至懷疑自己是否適合做一名程序員。

因此,今天我想跟你分享 10 個關(guān)于 JavaScript的小技巧,希望可以幫助你避免編寫我曾經(jīng)寫過的垃圾代碼。

1.Promise回調(diào)地獄

Promise 提供了一種優(yōu)雅的方式來處理 JavaScript 中的異步操作。這也是避免“回調(diào)地獄”的解決方案之一。但我不太明白這是什么意思,所以我寫了這段代碼。

我做了這些事情:

  • 首先獲取用戶的基本信息。

  • 按用戶信息獲取所有文章的簡要摘要。

  • 通過文章簡要了解文章詳情。

// ?getUserInfo()  .then((userInfo) => {    getArticles(userInfo)      .then((articles) => {        Promise.all(articles.map((article) => getArticleDetail(article)))          .then((articleDetails) => {            console.log(articleDetails)          })      })  })

我在這里根本沒有利用 Promise。我們應(yīng)該像下面的代碼片段一樣處理它:

// ?getUserInfo()  .then((getArticles)  .then((articles) => {    return Promise.all(articles.map((article) => getArticleDetail(article)))  })  .then((articleDetails) => {    console.log(articleDetails)  })

2. 不處理錯誤消息

我經(jīng)常只寫請求成功的代碼邏輯,而忽略請求失敗的代碼邏輯。

// ?const getUserInfo = async () => {  try {    const userInfo = await fetch('/api/getUserInfo')  } catch (err) {
 }}

這是缺乏經(jīng)驗(yàn)的做法,我們應(yīng)該給出一個用戶友好的提示,而不是什么也不做。

// ?const getUserInfo = async () => {  try {    const userInfo = await fetch('/api/getUserInfo')  } catch (err) {    Toast(err.message)  }}

3.為函數(shù)設(shè)置太多參數(shù)。

當(dāng)一個函數(shù)的參數(shù)太多時,它的可讀性就會降低,甚至讓我們不知道如何正確地傳遞參數(shù)。

舉個例子:

我們想要獲取用戶的一些基本信息,比如姓名、性別、年齡等。

// ?const getUserInfo = (name, age, weight, gender, mobile , nationality, hobby, address) => {  // ...}getUserInfo('fatfish', 100, 2000, ...)

那太糟了。如果你的同事寫出這樣的代碼,你會毆打他嗎?

事實(shí)上,當(dāng)函數(shù)參數(shù)過多時,應(yīng)該使用對象來傳遞所需的信息,這樣其可讀性和可擴(kuò)展性就會提高。

// ?const getUserInfo = (options) => {  const { name, gender, age, mobile, weight, nationality, hobby, address } = options  // ...}getUserInfo({  name: 'fatfish',  age: 100,  weight: 2000  // ...})

4.使用幻數(shù)

小伙伴們,你們有寫過這樣的代碼嗎?很多地方用數(shù)字來進(jìn)行邏輯判斷似乎很正常。是的,這讓我很困惑 1、2、3 到底是什么意思。

?// component1.jsif (status === 1 || status === 2) {  // ...} else if (status === 3) {  // ...}// component2.jsif (status === 1 || status === 2) {  // ...}

我們最好將這些數(shù)字定義為常量。

// ?// constants.jsexport const STATUS = {  // It is an adult and has real-name authentication  adultRealName: 1,  // It is a minor and has real-name authentication  minorRealName: 2,  // Not real-name authentication  notRealName: 3,  // ...}// component1.jsimport { STATUS } from './constants.js'if ([ STATUS.adultRealName, STATUS.minorRealName ].includes(status)) {  // ...} else if (status === STATUS.notRealName) {  // ...}// component2.jsimport { STATUS } from './constants.js'// component2.jsif ([ STATUS.adultRealName, STATUS.minorRealName ].includes(status)) {  // ...}

5.使用.length判斷字符串的長度

大多數(shù)時候,我們使用.length,判斷字符串的長度是安全的,但是在表單輸入的情況下要小心使用。

當(dāng)我們輸入 ?? 時,nameLen 的值為 2 — 這不是很奇怪嗎?

// ?<input type="text" id="name"><script>  const $name = document.getElementById('name')  $name.addEventListener('blur', () => {    const name = $name.value    const nameLen = name.length    // input: fatfish => nameLen: 7    // input: ??  => nameLen: 2    console.log(`name: ${name}, nameLen: ${nameLen}`)  }, false)</script>

是的,這是有原因的,你猜怎么著?

// ?<input type="text" id="name"><script>  const $name = document.getElementById('name')  $name.addEventListener('blur', () => {    const name = $name.value    const nameLen = name.length    const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g    const nameRealLen = name.replace(spRegexp, '_').length    // input: fatfish => nameLen: 7, nameRealLen: 7    // input: ??  => nameLen: 2, nameRealLen: 1    console.log(`name: ${name}, nameLen: ${nameLen}, nameRealLen: ${nameRealLen}`)  }, false)</script>

6.永遠(yuǎn)不要寫代碼注釋

我們經(jīng)常向別人抱怨:“你為什么不寫代碼注釋呢?” 但實(shí)際上,我從來沒有寫過!

// ?const fn = (dpr) => {  if (dpr >= 2) {    // ...  } else {  }}

天哪,你知道“dpr”是什么意思嗎?我沒想到這意味著窗口設(shè)備PixelRatio。

// ?// dpr: Please enter a value for window.devicePixelRatioconst fn = (dpr) => {  if (dpr >= 2) {    // ...  } else {  }}

7. 無意義的代碼注釋

與其寫無意義的代碼注釋,還不如不寫代碼注釋,因?yàn)樗速M(fèi)你的時間。

你不妨解釋一下“a”的含義或使用有意義的變量名稱!

// ?let a = 1 // Set the value of "a" to 1

8. 隨機(jī)命名

過去,我常常編寫隨機(jī)命名變量的尷尬代碼片段。

// ?const mw = 375

朋友們,請不要向我學(xué)習(xí)。你應(yīng)該給變量一個正確且有意義的名稱。

?const maxWidth = 375

9. 不刪除已棄用的代碼

很多時候,我們的網(wǎng)站會不斷調(diào)整功能,有新的和廢棄的功能,但我總是擔(dān)心以后會用到它們,所以我只是注釋它們,而不是刪除它們。

其實(shí)這種擔(dān)心完全沒有必要,因?yàn)橐院笥玫目赡苄院苄 <词挂院笠玫?,也可以通過‘git’進(jìn)行追溯。

10. 一千多行組件代碼

我在一個組件中編寫了一千多行代碼。這太糟糕了,我們應(yīng)該將組件的功能進(jìn)一步拆分為更小的組件。

最后

以上就是我今天想與你分享的全部內(nèi)容,希望對你有用。


該文章在 2024/10/14 10:16:11 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved