成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

作為前端工程師,你應該了解的十個 JavaScript 技巧

開發 前端
過去我寫了很多垃圾代碼,現在看起來很糟糕。當我再次看到那些代碼片段時,我什至懷疑自己是否適合做一名程序員。

前言

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

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

1.Promise回調地獄

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

我做了這些事情:

  • 首先獲取用戶的基本信息。
  • 按用戶信息獲取所有文章的簡要摘要。
  • 通過文章簡要了解文章詳情。
// ?
getUserInfo()
  .then((userInfo) => {
    getArticles(userInfo)
      .then((articles) => {
        Promise.all(articles.map((article) => getArticleDetail(article)))
          .then((articleDetails) => {
            console.log(articleDetails)
          })
      })
  })

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

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

2. 不處理錯誤消息

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

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


  }
}

這是缺乏經驗的做法,我們應該給出一個用戶友好的提示,而不是什么也不做。

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

3.為函數設置太多參數。

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

舉個例子:

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

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

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

事實上,當函數參數過多時,應該使用對象來傳遞所需的信息,這樣其可讀性和可擴展性就會提高。

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

4.使用幻數

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

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

我們最好將這些數字定義為常量。

// ?
// constants.js
export 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.js
import { STATUS } from './constants.js'
if ([ STATUS.adultRealName, STATUS.minorRealName ].includes(status)) {
  // ...
} else if (status === STATUS.notRealName) {
  // ...
}
// component2.js
import { STATUS } from './constants.js'
// component2.js
if ([ STATUS.adultRealName, STATUS.minorRealName ].includes(status)) {
  // ...
}

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

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

當我們輸入 ?? 時,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.永遠不要寫代碼注釋

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

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

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

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

7. 無意義的代碼注釋

與其寫無意義的代碼注釋,還不如不寫代碼注釋,因為它浪費你的時間。

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

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

8. 隨機命名

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

// ?
const mw = 375

朋友們,請不要向我學習。你應該給變量一個正確且有意義的名稱。

?
const maxWidth = 375

9. 不刪除已棄用的代碼

很多時候,我們的網站會不斷調整功能,有新的和廢棄的功能,但我總是擔心以后會用到它們,所以我只是注釋它們,而不是刪除它們。

其實這種擔心完全沒有必要,因為以后用的可能性很小。即使以后要用到,也可以通過‘git’進行追溯。

10. 一千多行組件代碼

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

最后

以上就是我今天想與你分享的全部內容,希望對你有用,最后,感謝你的閱讀,如果你覺得不錯的話,請記得關注我,點贊我,這樣你將會閱讀到更多文章內容。

責任編輯:華軒 來源: web前端開發
相關推薦

2021-10-09 10:50:30

JavaScript編程開發

2014-03-04 09:35:45

JavaScript調試

2022-05-06 13:19:13

JS前端

2021-03-11 09:02:37

SQL數據庫數據

2023-09-26 19:14:57

VS Code插件參數

2017-01-22 12:41:02

CinnamonLinux桌面

2023-10-16 07:55:15

JavaScript對象技巧

2022-10-20 15:12:43

JavaScript技巧開發

2024-03-04 16:32:02

JavaScript運算符

2024-04-24 14:52:26

JavaScriptWeb 開發

2023-01-27 15:22:11

JavaScript開發編程語言

2019-05-21 16:19:46

前端性能優化圖片

2023-12-15 10:42:05

2009-07-16 13:28:14

2009-11-04 10:57:35

2015-09-17 11:07:57

思維作為前端工程

2024-12-02 14:28:17

JavaScriptWeb開發

2024-08-21 08:37:47

CodeEmmet懸浮框

2021-04-30 23:19:04

前端框架工具

2023-04-17 16:19:32

編程語言JavaScript開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 九九热这里只有精品6 | 精品视频一区二区三区在线观看 | 91新视频 | а天堂中文最新一区二区三区 | 一区二区高清 | 日韩av免费在线观看 | 91大神新作在线观看 | 久久精品日 | 久久成人18免费网站 | 国产亚洲欧美日韩精品一区二区三区 | 成人免费网视频 | 国产综合久久久久久鬼色 | 国产精品久久久久久久久久久久 | 国产精品美女久久久久久久久久久 | 日韩一级免费电影 | 中文字幕精品一区 | 99在线精品视频 | 欧美日韩亚洲国产 | 国产午夜精品一区二区三区四区 | 黑人精品 | 精品视频一区在线 | 国产成人午夜精品影院游乐网 | 亚洲精品白浆高清久久久久久 | 国产一区久久 | 成人一区二区三区 | 国产黄色免费网站 | aaa国产大片 | 中文字幕 在线观看 | 亚洲精品中文字幕在线 | 亚洲精品一区二区在线观看 | 亚洲欧美日韩久久久 | 99精品欧美一区二区三区综合在线 | 亚洲第一av | 91久久久精品国产一区二区蜜臀 | 91欧美激情一区二区三区成人 | 成人亚洲一区 | 欧美日韩久久 | 在线免费观看黄网 | 精品99爱视频在线观看 | 播放一级黄色片 | 亚洲精品一区在线 |